0

我正在使用 Mocha 和 WebDriver 测试我的网络应用程序。我正在为有关 Mocha 测试顺序和驱动程序持久状态的最佳实践而苦苦挣扎。

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

测试\
    index.js
    硒\
        登录.js
        搜索.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 定义文件的执行顺序?

4

1 回答 1

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。或者您可以以编程方式启动 Mocha 并用于addFile按顺序添加文件。

于 2014-04-30T10:45:21.397 回答