In Apex Unit tests why doesn't the MyConrtoller myCont = new MyController(StandardContoller); call set the current page?
For instance if I have this page:
<apex:page standardController="DB_Object__c" extensions="MyExtension">
<apex:form id="detail_list">
<apex:detail />
<apex:actionStatus id="readStatus">
<apex:facet name="start">
Loading, please wait...
</apex:facet>
<apex:facet name="stop"><apex:outputPanel >
<apex:commandButton action="{!readData}"
value="Update Data"
rerender="detail_list"
status="readStatus"/>
{!remainingRecords}</apex:outputPanel>
</apex:facet>
</apex:actionStatus>
</apex:form>
</apex:page>
If my unit tests creates this:
DB_Object__c dbObj = new DB_Object__c();
dbObj.Name = 'test';
dbObj.Setting = 'aSetting';
insert dbObj;
Test.setCurrentPageReference(Page.Demo);
ApexPages.StandardController sc = new ApexPages.StandardController(dbObj);
MyExtension myExt = new MyExtension(sc);
Why does ApexPages.currentPage().getParameters().get('id');
fail? I have to do:
ApexPages.currentPage().getParameters().put('id',dbObj.id);
What is the point of passing in the dbObj
to StandardController
if it doesn't do anything with it? Is the intent that you send in a blank object and the extenstion uses this object? There doesn't seem to be a lot of documentation for StandardControllers and Unit Testing...
Thanks!
One way to go about this in a test scenario would be something like this:
// at first you have to create the object
DB_Object__c dbObj = new DB_Object__c();
dbObj.Name = 'test';
dbObj.Setting = 'aSetting';
insert dbObj;
// then you'd call the vf page with the id query paramter
Test.setCurrentPageReference(Page.Demo);
ApexPages.currentPage().getParameters().put('id', dbObj.Id);
dbObj = [Select All, Fields, You, Need From DB_Object__c Where Id = :ApexPages.currentPage().getParamters().get('id')];
// then the StandardController & controller extension get initiated
ApexPages.StandardController sc = new ApexPages.StandardController(dbObj);
MyExtension myExt = new MyExtension(sc);
Now to your question why does getParameters().get('id')
fail? You can initiate a StandardController without a record id which would give you a new record and automatically insert the record if you use the default save
PageReference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With