Angular中的量角器测试:如何在没有ng-bind和ng-model的情况下检查范围内的变量?

时间:2016-01-07 15:43:30

标签: angularjs protractor bdd cucumberjs

如何在没有ng-bind和ng-model的情况下检查范围内的变量?

<span ng-if="user.code === 'YELLOW'">
    <span class="glyphicons glyphicons-circle-remove text-danger"></span> Yellow
</span>
<span ng-if="user.code === 'GREEN'">
    <span class="glyphicons glyphicons-circle-exclamation-mark text-warning"></span> Green
</span>

我想检查带有量角器的user.code

使用ng-bind和ng-model它不起作用

browser.expect(element(by.binding('user.code')).getText()).to.eventually.equal('');

browser.expect(element(by.model('user.code')).getAttribute('value')).to.eventually.equal('');

错误:

NoSuchElementError: No element found using locator: by.binding("user.code")
NoSuchElementError: No element found using locator: by.model("user.code")

2 个答案:

答案 0 :(得分:2)

你不应该在量角器中测试那种东西。您应该从用户的角度编写测试。

但是,如果要测试使用evaluate。获取对DOM元素的引用,然后调用evaluate:

// Choose a DOM element bound to a scope that contains the value you
// want to test
expect($('span').evaluate('user.code')).toBe('some value');

http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.evaluate

答案 1 :(得分:1)

第一种解决方案

如果您可以通过CSS选择器找到您的元素。

$('.glyphicons-circle-remove').isPresent(); // For user.code == 'YELLOW'
$('.glyphicons-circle-exclamation-mark').isPresent(); // For user.code == 'GREEN'

Hacky方式

仅限工作如果您使用ng-if

$('[ng-if="user.code === \'YELLOW\'"]').isPresent(); // For user.code == 'YELLOW'
$('[ng-if="user.code === \'GREEN\'"]').isPresent(); // For user.code == 'GREEN'

因为元素仅在ng-if的条件满足时才出现。所以你也可以这样做。

注意:  .isPresent()因为ng-if会从DOM中删除该元素。 如果您使用ng-show,则需要使用.isDisplayed()代替(这不适用于第二种解决方案)。