2015-11-10 50 views
0

在角度站點上使用Jasmine /量角器時,我試圖驗證我剛剛在下拉菜單中做出的選擇時遇到了一個有趣的問題。 兩個下拉菜單是幾乎相同的,他們的網頁索裏,如下所示:預期報表之間的區別毫無意義

GroupAssocDrpDwn頁來源:

<select class="pure-input-1 ng-pristine ng-untouched ng-valid length" id="groupAssociation" name="groupAssociation" ng-init="company.group.id = null" ng-model="company.group" ng-options="group as group.name for group in groups | orderBy : 'name'" ng-change="setStates(company.group)" has-value=""><option value="?" selected="selected"></option><option value="object:312" label="--No Group Association--">--No Group Association--</option><option value="object:313" label="Amicus Solar">Amicus Solar</option><option value="object:314" label="BakeryDirect">BakeryDirect</option><option value="object:315" label="Bicycle/Rumbleship">Bicycle/Rumbleship</option><option value="object:316" label="Brixy">Brixy</option><option value="object:317" label="NuORDER">NuORDER</option><option value="object:318" label="ProTradeNet">ProTradeNet</option><option value="object:319" label="Receivables">Receivables</option></select> <option value="object:313" label="Amicus Solar">Amicus Solar</option> 等...

StateDropdown頁來源:

<select name="state" ng-model="company.addresses[0].state" class="pure-input-1 ng-pristine ng-invalid ng-invalid-required ng-touched" ng-options="state.abbr as state.name for state in states" ng-init="setStates()" has-value="" required="" style=""><option value="?" selected="selected"></option><option value="string:AL" label="Alabama">Alabama</option><option value="string:AK" label="Alaska">Alaska</option><option value="string:AS" label="American Samoa">American Samoa</option><option value="string:AZ" label="Arizona">Arizona</option><option value="string:AR" label="Arkansas">Arkansas</option><option value="string:CA" label="California">California</option><option value="string:CO" label="Colorado">Colorado</option><option value="string:CT" label="Connecticut">Connecticut</option><option value="string:DE" label="Delaware">Delaware</option><option value="string:DC" label="District Of Columbia">District Of Columbia</option><option value="string:FM" label="Federated States Of Micronesia">Federated States Of Micronesia</option> <option value="string:FL" label="Florida">Florida</option> 等等。 ..

在一個單獨的類,我有兩個下拉對象定義的,調用數據我想從下拉列表中選擇:

this.objAdminCompaniesGroupAssocDrpDwn = element(by.model('company.group')) 
this.objAdminCompaniesStateDrpDwn = element(by.model("company.addresses[0].state")) 

this.selectGrpAssocDropdown = function(value){ 
    return this.objAdminCompaniesGroupAssocDrpDwn.sendKeys(commonData.drpCmpnyGrpAssociation); 
} 

this.selectCompanyUSCAStateDropdown = function(value){ 
    return this.objAdminCompaniesStateDrpDwn.sendKeys(commonData.txtCmpnyState); 
} 

在測試_spec.js文件,這些都是調用(它們被Describe/It包裹,沒有顯示......)。

adminAddCompany.selectGrpAssocDropdown(); 
expect((adminAddCompany.objAdminCompaniesGroupAssocDrpDwn).$('option:checked').getText()).toEqual(commonData.drpCmpnyGrpAssociation); 

adminAddCompany.selectCompanyUSCAStateDropdown(); 
expect((adminAddCompany.selectCompanyUSCAStateDropdown).$('option:checked').getText()).toEqual(commonData.txtCmpnyState); 

第一個(GroupAssocDrpDwn)上的EXPECT()傳遞正常。第二個的EXPECT()不是;它失敗,錯誤「失敗:adminAddCompany.selectCompanyUSCAStateDropdown。$不是函數」。 但是,如果我把()在第二屆通話結束後,像這樣:

expect((adminAddCompany.objAdminCompaniesGroupAssocDrpDwn()).$('option:checked').getText()).toEqual(commonData.drpCmpnyGrpAssociation); 

。 。 。它現在通過!

我不清楚爲什麼一個人不需要功能括號,而且會......? (請注意,第一個失敗的WITH括號,也...)

任何人都可以概述這兩個expect()調用之間的區別是什麼,對於一個非常好奇的人?

謝謝!

+1

該錯誤似乎來自'adminAddCompany.selectCompanyUSCAStateDropdown();'調用不是嗎?在你說的地方添加'()'是否會讓事情通過或導致不同的錯誤(也許你錯過了)?你似乎也有你的「第一」和「第二」有點困惑。 –

回答

1

objAdminCompaniesGroupAssocDrpDwnobjAdminCompaniesStateDrpDwnElementFinder其原型包含$函數。所以objAdminCompaniesGroupAssocDrpDwn.$()是合法的。

selectCompanyUSCAStateDropdownselectGrpAssocDropdown只是返回Promise的函數。 $不是基本函數原型上的屬性。所以你需要用()執行這個函數才能獲得底層的Promise。

這裏沒有任何意義的是對所產生的Promise調用$。你確定你正確地複製錯誤和修改過的代碼嗎?

+0

SkinnyJ你是對的 - 謝謝。有時它只是需要另一個眼睛......: - /我在調用函數而不是obj定義(這正是我真正想要的)。下面是正確的,運行expect()ed ...'expect((adminAddCompany.objAdminCompaniesStateDrpDwn)。$('option:checked')。getText())。toEqual(commonData.txtCmpnyState);' – bmagstadt