我正在尝试构建一个功能测试系统来验证我们的网站对我们的用户来说是否正确。我拼凑了一堆 Node.js 模块和帮助程序,试图获得一个框架,该框架提供简单、简洁的测试而没有大量嵌套函数回调,我相信 Promise 可以提供这一点,所以我的package.json
文件如下所示:
"dependencies": {
"chai-as-promised": "^4.3.0",
"grunt": "^0.4.5",
"grunt-webdriver": "^0.4.8"
}
我的Gruntfile.js
样子是这样的:
module.exports = function(grunt) {
grunt.initConfig({
webdriver: { // for use with webdriver.io
options: {
desiredCapabilities: {
browserName: 'phantomjs' // No Xvfb required
}
},
chrome: {
tests: ['chrome/*.js'],
options: {
desiredCapabilities: {
browserName: 'chrome'
}
}
},
},
});
grunt.loadNpmTasks('grunt-webdriver');
grunt.registerTask('default', ['webdriver']);
};
最后我的测试用例chrome/login.js
看起来像这样:
'use strict';
var chai = require('chai'),
chaiAsPromised = require('chai-as-promised'),
assert;
chaiAsPromised.transferPromiseness = browser.transferPromiseness;
chai.use(chaiAsPromised);
assert = chai.assert;
describe('login test', function () {
it('verifies user can log in', function(done) {
browser
.url('https://localhost/')
.setValue('#userauth_username','foo')
.setValue('#userauth_password',"password")
.submitForm('#form_users_login')
.then(function(){
browser.getText('#auth-user-id', function(err, value){
console.log(value);
});
assert.becomes(browser.getText('#auth-user-id'), 'foo');
})//.call(done);
});
});
当我grunt webdriver:chrome
在命令行上运行时,我看到它启动了 Chrome 并登录到网站。'auth-user-id' 跨度在登录后正确显示用户的 id,但由于某种原因browser.getText()
没有返回它,因此测试失败。我尝试在.pause(100)
之后添加一个.submitForm()
,让我有时间与 Chrome 中的页面进行交互,所以我知道这是测试用例中的一个问题。
我究竟做错了什么?