【问题标题】:beforeEach and AfterEach for every test case using Globals.js使用 Globals.js 的每个测试用例的 beforeEach 和 AfterEach
【发布时间】:2018-12-14 15:43:54
【问题描述】:

所以,我有一个 globals.js 文件,其中我提到了 beforeEach 和 afterEach,但是我可以从这个链接 Nightwatch Globals 中理解,beforeEach 和 afterEach 在测试套件之前和之后被调用一次(单个 Js 文件)。但是在我的框架中,我在单个 js 文件(或测试套件)中有多个测试用例,我想在每个测试用例之前和之后调用 beforeEach 和 afterEach。无论如何要做到这一点?下面是我的 globals.js 文件:

module.exports = {
    asyncHookTimeout: 40000,

    beforeEach: function (browser, done) {
        // browser.maximizeWindow();
        // browser.deleteCookies();
        browser.perform(function () {
            console.log('Inside BeforeEach');
            done();
        });
    }

    afterEach: function (browser, done) {
        browser.end(function () {
            console.log("Inside After Each");
            done();
        });
    },
};

【问题讨论】:

    标签: javascript nightwatch.js


    【解决方案1】:

    当然有!只需使用臭名昭著的 Nightwatch test hooks

    • 如果您想过滤您的 测试套件,那么正如您所指出的, 我们将使用global test hooks
    • 如果您想过滤您的测试用例,那么我们将使用test hooks

    示例您的测试文件应如下所示):

    module.exports = {
    
      before(browser) {
        // > this will get run only ONCE, before all the tests <
      },
      beforeEach(browser) {
        // > this will get run before every test case <
      }
    
      tags: ['your', 'tags', 'go', 'here'],
      'Test Case No.1': (browser) => {
         // > this test does something here <
      },
      'Test Case No.2': (browser) => {
         // > this test does something else here <
      },
      'Test Case No.3': (browser) => {
         // > this test does something else here <
      },
    
      afterEach(browser) {
        // > this will get run after every test case <
      },
      after(browser) {
        // > this will get run ONCE, after all tests have run <
      }
    };
    

    最后,引用文档:

    beforeafter 将在执行之前和之后运行 分别测试套件(在我们的例子中是测试文件),而 beforeEachafterEach 在之前运行 并在每个测试用例之后(测试步骤)。


    LE:@AlapanDas 想要定制 Nightwatch 测试运行器处理测试级挂钩的方式。这当然是可行的,但很脏。您必须从以下文件重新编写挂钩逻辑:

    Nightwatch@v0.9.x:

    • testcase.js(路径:/nightwatch/lib/runner/testcase.js);
    • testsuite.js(路径:/nightwatch/lib/runner/testsuite.js);

    Nightwatch@v1.0.x:

    • /hooks 文件夹中的每个 {hookName}.js 文件(路径:/nightwatch/lib/testsuite/hooks/*.js);

    不过,还是可以在这里妥协!只需尝试从您的beforeafter 等钩子中找到常见的、重复出现的步骤/说明并在/custom_commands 文件中提取该逻辑。这将压缩您的测试文件,并将登录与您的挂钩解耦。从长远来看,这也将在维护钩子时赋予单点更改的优势。

    【讨论】:

    • 目前我正在按照您提到的方式使用它,这有点多余。所以一直在寻找一些方法来实现一次并重用它。
    • 嘿@AlapanDas!是的,好吧,这不是多余的。它们有一个非常明确的特定目的:授予您对测试级挂钩的访问权限。没有人会因为在所有测试文件中都包含它们而责怪您(假设逻辑是否适合使用这些钩子)。所以,这是使用测试级挂钩的推荐方法!我会用你必须尝试的方法来更新答案以实现这一目标,但相信我,你会给自己带来比你准备好的更多的麻烦。
    • 嘿@AlapanDas!这方面的现状如何?您是否决定继续测试文件级别的挂钩并在/custom_commands 中提取公共逻辑?让我们得出一个结论!
    • 还没有。放假后试一试。感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2016-10-21
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多