我一直在做AngularJS教程,我在beforeEach中遇到了一个奇怪的问题,一个是端到端的测试。对于上下文,我目前在step 3的实验部分。测试代码在这里:
'use strict';
/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */
describe('PhoneCat App', function() {
describe('Phone list view', function() {
beforeEach(function() {
browser.get('app/index.html');
});
it('should filter the phone list as user types into the search box', function() {
var phoneList = element.all(by.repeater('phone in phones'));
var query = element(by.model('query'));
expect(phoneList.count()).toBe(3);
query.sendKeys('nexus');
expect(phoneList.count()).toBe(1);
query.clear();
query.sendKeys('motorola');
expect(phoneList.count()).toBe(2);
});
});
it('should display current filter value within an element with id "status"', function() {
var statusElement = element(by.id('status'));
expect(statusElement.getText()).toMatch(/Current filter:\s*$/);
element(by.model('query')).sendKeys('nexus');
expect(statusElement.getText()).toMatch(/Current filter: nexus\s*$/);
});
});
beforeEach块应该在每个规范执行之前重新加载页面,但似乎不是,因为当我使用量角器运行时,插入第一个规范('motorola')中的查询元素的最后一个文本仍然存在执行第二个规范,导致第二个规范失败。
现在,当我将beforeEach移动到外部描述块时,所有规范都成功通过。有任何想法吗?
答案 0 :(得分:3)
glepretre是正确的。如上例所示,您的测试看起来像这样
describe
describe
before
it
it
由于这种嵌套,之前只运行一次,在第一次之前。看看它阻止测试的内容,我认为它们都是为了测试电话列表视图,在这种情况下,正确的嵌套如下:
describe
describe
before
it
it
但是,如果索引页面不是特定于电话列表视图但包含整个应用程序,那么它应该可以加载到顶级描述块中,使其成为最正确的方法:
describe
before
describe
it
it