我实际上正在完成我的 Angular 应用程序的单元测试。我目前正在使用 Protractor 和 Jasmine 进行 E2E 测试。不幸的是,我有以下问题:
我在网上做了很多研究,例如 http://ramonvictor.github.io/protractor/slides/#/1而且我显然从未见过使用“完成”回调来启动测试。
第一个测试在 createUser 页面上进行,并确保用户选项卡属性设置为 active。仅当我使用我不应该使用的 done 方法时它才会通过。
'use strict';
var UserCreate = require('./page-objects/userCreate.pageObjects');
describe('on init', function () {
beforeEach(function() {
var rootUrl = browser.baseUrl + '/#/users/create';
browser.driver.get(rootUrl);
});
it('should set the user tab active', function(done) { // DONE callback
UserCreate.tabs.getAttribute('class').then(function(value) {
expect(value).toEqual('active');
done(); // calling callback
});
});
});
如果我在不使用 done() 的情况下重复相同的测试,即使这次测试通过,我希望它失败。
'use strict';
var UserCreate = require('./page-objects/userCreate.pageObjects');
describe('on init', function () {
beforeEach(function() {
var rootUrl = browser.baseUrl + '/#/users/create';
browser.driver.get(rootUrl);
});
it('should set the user tab active', function() {
UserCreate.tabs.getAttribute('class').then(function(value) {
expect(value).toEqual('activeWRONG');
});
});
});
只有在我使用 done 回调时才会失败。
这是我的配置文件:
/* conf.js */
' use strict';
exports.config = {
rootElement: '#myApp',
directConnect: true,
seleniumAddress: 'http://localhost:4444/wd/hub',
capabilities: {
browserName: 'chrome',
shardTestFiles: true,
maxInstances: 1
},
framework: 'jasmine',
// specs: ['./*.spec.js'],
baseUrl: 'http://localhost:9001',
defaultTimeoutInterval: 0000,
jasmineNodeOpts: {
showColors: true,
},
suites: {
wip: './userCreate.spec.js',
all: './*spec.js'
},
onPrepare: function() {
browser.driver.get('http://localhost:9001/#/');
element(by.id('ld-link-login')).click();
browser.sleep(500);
element(by.model('username')).sendKeys('test');
element(by.model('password')).sendKeys('test');
element(by.id('nv-login-submit')).click();
return browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
return /dashboard/.test(url);
});
}, 10000);
}
};
我在使用 done everywhere 的更深入测试中遇到异步问题,所以我想在继续我的测试之前解决这个问题。
感谢您的帮助。
编辑:
Protractor 版本:./node_modules/.bin/protractor --version 给出版本 3.2.2
用户创建页面对象:
'use strict';
module.exports = {
tabs: element(by.id('cc-tab-user'))
};
最佳答案
这是预期的行为。如果您不请求 done()
函数,jasmine 将认为您的测试是同步的,并在不等待 promise 被解决的情况下完成。
当你要求它时,你的测试变成异步的,如果 done()
在超时(默认为 5 秒)之前没有被调用,将会失败
请参阅:http://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support了解更多信息。
关于angularjs - 没有 done() 方法, Protractor 无法通过我的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696772/