gpt4 book ai didi

angularjs - beforeEach(以防止测试污染)未按预期工作

转载 作者:行者123 更新时间:2023-11-28 20:06:15 25 4
gpt4 key购买 nike

我一直在学习 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 block 应该在每次规范执行之前重新加载页面,但它似乎不是,因为当我使用 Protractor 运行它时,插入到第一个规范('motorola')中的查询元素的最后一个文本仍然存在第二个规范被执行,导致第二个规范失败。

现在,当我将 beforeEach 移动到外部 describe block 时,所有规范都成功通过了。有任何想法吗?

最佳答案

glepretre 是正确的。按照上面示例中的结构,您的测试如下所示

describe
describe
before
it
it

因为这种嵌套,before 只运行一次,在第一个 it 之前。查看每个它 block 正在测试的内容,我认为它们都是为了测试电话 ListView ,在这种情况下正确的嵌套如下:

describe
describe
before
it
it

但是,如果索引页面不是特定于电话 ListView 而是包含整个应用程序,那么它可能应该加载到顶级描述 block 中,这是最正确的方法:

describe
before
describe
it
it

关于angularjs - beforeEach(以防止测试污染)未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23304377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com