期望陈述的差异毫无意义

时间:2015-11-10 20:09:24

标签: javascript angularjs jasmine protractor expect

在角度网站上使用Jasmine / Protractor,在尝试验证我刚刚在下拉列表中做出的选择时,我遇到了一个有趣的问题。 这两个下拉菜单实际上完全相同,其页面内容如下:

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);

第一个上的EXPECT()(GroupAssocDrpDwn)传递正常。第二个上的EXPECT()没有;它失败并显示错误“失败:adminAddCompany.selectCompanyUSCAStateDropdown。$不是函数”。 但是,如果我把()放在第二次调用结束时,就像这样:

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

。 。 。它现在通过了!

我不清楚为什么一个人不需要功能支架,一个会...? (注意第一个用括号失败,也是......)

对于一个非常好奇的人来说,任何人都可以概述这两个expect()调用之间的区别吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

selectCompanyUSCAStateDropdownselectGrpAssocDropdown只是返回Promise的函数。 $不是基本函数原型的属性。因此,您需要使用()执行该函数才能获得基础Promise。

这里没有意义的是在最终的Promise上调用$。您确定要正确复制错误和修改后的代码吗?