Функциональное тестирование с помощью grunt-webdriver, mocha и chai-as-обещано
Я пытаюсь создать систему функционального тестирования, чтобы убедиться, что наш веб-сайт ведет себя правильно для наших пользователей. Я собрал воедино кучу модулей и помощников Node.js, пытаясь получить среду, которая предоставляет простые, краткие тесты без кучи обратных вызовов вложенных функций, и я полагаю, что обещания могут обеспечить это, поэтому мой 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' правильно отображает идентификатор пользователя после входа в систему, но по какой-то причине browser.getText()
не возвращает его, и поэтому тест не пройден. Я попытался добавить .pause(100)
после .submitForm()
дать мне время для взаимодействия со страницей в Chrome, чтобы я знал, что это проблема в тестовом примере.
Что я делаю неправильно?
1 ответ
Кажется, это лучший и самый лаконичный способ делать то, что я хочу. Я не уверен, что мне нужно chai-as-promised
пока, но, возможно, я перенесу функцию входа во включенный файл и использую chai-as-обещано, чтобы утверждать, что обещанный вход в систему произошел до входа в тесты.
"использовать строгое";
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.