0 votes
1 view
in Salesforce by (11.9k points)

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 create 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 extension uses this object? There doesn't seem to be a lot of documentation for StandardControllers and Unit Testing...

Thanks!

1 Answer

0 votes
by (30.1k points)

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 launch a StandardController without a record ID which would give you a new record and automatically include the record if you use the default save PageReference.

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...