Функциональное тестирование с помощью 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.
Другие вопросы по тегам