Mocha测试顺序文件和webdriverjs实例持久性

时间:2014-04-30 09:49:46

标签: javascript webdriver mocha webdriver-io

我正在使用Mocha和WebDriver测试我的网络应用。我正在努力克服有关Mocha测试顺序和驱动程序持久状态的最佳实践。

我想将测试分成不同的文件,例如

test\
    index.js
    selenium\
        login.js
        search.js

因此,在执行方面,login.js必须是第一个,因为它登录到应用程序并获得身份验证。只有在search.js之后才可以做到。但是怎么样?在login.js中,我现在有了这个:

webdriverjs = require('webdriverjs');

describe 'UI/Selenium', ->
    client = {}

    before ->
        client = webdriverjs.remote
            desiredCapabilities:
                browserName: 'chrome'

        client.init()
        client.windowHandleSize({width: 1920, height: 1080})

    it 'should let us login', (done) ->
        client.url('http://127.0.0.1:1337/login')
        .setValue('#username', 'username')
        .setValue('#password', 'password')
        .buttonClick('button[type="submit"]')
        .waitFor '#search_results_user', 5000, (err) -> throw err if err
        .call done

如何在不必每次重新启动客户端的情况下将客户端状态持久化到其他测试?如何使用Mocha定义文件的执行顺序?

1 个答案:

答案 0 :(得分:0)

  

如何在不必每次都重新启动客户端的情况下将客户端状态保持到其他测试状态?

您可以在before挂钩中设置要在测试中共享的任何内容(并在after挂钩中将其拆除)。这意味着移动测试中的代码以登录到before挂钩。假设您正在测试“foo”视图,您可以这样做:

describe("foo view", function () {
    before(function () { /* create selenium driver */ });

    describe("when used by a logged in user", function () {
        before(function () { /* log in */ });

        it(...

        it(...

        after(function () { /* log out */ });
    });

    describe("when used by a logged out user", function () {
        it(...

        it(...
    });
    after(function () { /* shut down the driver */ });
});
  

如何使用Mocha定义文件的执行顺序?

摩卡测试不应该相互依赖,因此不应该依赖于它们的执行顺序。

如果您处于必须违反此基本规则的情况,您可以按照所需的顺序从命令行调用带有测试文件列表的Mocha。或者您可以通过编程方式启动Mocha并使用addFile按顺序添加文件。