我正在尝试建立一个功能测试系统来验证我们的网站对于我们的用户来说运行是否正确。我拼凑了一堆Node.js模块和帮助器,试图获得一个框架,它可以提供简单、简洁的测试,而不需要一堆嵌套的函数回调,我相信promises可以提供这一点,所以我的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()没有返回它,因此测试失败。我尝试在.submitForm()后面添加一个.pause(100),让我有时间在Chrome中与页面交互,所以我知道这在测试用例中是一个问题。
我做错了什么?
发布于 2015-03-18 07:42:48
这似乎是做我想做的事情的最好和最简洁的方式。我还不确定是否需要chai-as-promised,但也许我会将登录函数移到一个包含的文件中,并使用chai-as-promised在进入测试之前断言承诺的登录已经发生。
‘使用严格的’;
var chai = require('chai'),
chaiAsPromised = require('chai-as-promised'),
assert,
expect;
chaiAsPromised.transferPromiseness = browser.transferPromiseness;
chai.use(chaiAsPromised);
assert = chai.assert;
expect = chai.expect;
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')
.waitForExist('#auth-user-id')
.getText('#auth-user-id')
.then(function(text){
//console.log('Username: ' + text);
assert.equal(text, 'foo');
})
.saveScreenshot('out.png')
.call(done)
});
it('should not display logincontrols after login', function(done){
browser
.isVisible('#logincontrols')
.then(function(bool){
expect(bool).to.be.false;
})
.call(done)
});
it('should display loggedin section after login', function(done){
browser
.isVisible('#loggedin')
.then(function(bool){
expect(bool).to.be.true;
})
.call(done)
});
});为了完整起见,下面是我在输出中看到的:
# grunt webdriver:chrome
Running "webdriver:chrome" (webdriver) task
login test
✓ verifies user can log in (7691ms)
✓ should not display logincontrols after login (70ms)
✓ should display loggedin section after login (58ms)
3 passing (8s)
Done, without errors.https://stackoverflow.com/questions/29090233
复制相似问题