Я пытаюсь создать функциональную систему тестирования, чтобы убедиться, что наш веб-сайт ведет себя правильно для наших пользователей. Я объединил кучу модулей и помощников Node.js в попытке получить фреймворк, который обеспечивает простые, сжатые тесты без кучи вложенных обратных вызовов функций, и я считаю, что обещания могут обеспечить это, поэтому мой файл package.json
выглядит так:Функциональное тестирование с помощью grunt-webdriver, мокко и chai-as-обещано
"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, поэтому я знаю, что это проблема в тестовом примере.
Что я делаю неправильно?