【问题标题】:Functional testing with grunt-webdriver, mocha and chai-as-promised使用 grunt-webdriver、mocha 和 chai-as-promised 进行功能测试
【发布时间】:2015-03-17 02:16:02
【问题描述】:

我正在尝试构建一个功能测试系统,以验证我们的网站对我们的用户而言是否正确运行。我拼凑了一堆 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() 没有返回它,因此测试失败。我尝试在.submitForm() 之后添加.pause(100),让我有时间与Chrome 中的页面进行交互,所以我知道这是测试用例中的问题。

我做错了什么?

【问题讨论】:

    标签: selenium gruntjs mocha.js webdriver-io chai-as-promised


    【解决方案1】:

    这似乎是做我想做的最好和最简洁的方式。我不确定我是否需要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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 2016-10-05
      • 2014-07-22
      • 2016-02-12
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多