调用外部 URL 在 Testcafe 中设置和拆卸

Call external URL to setup and teardown in Testcafe

我正在将 Testcafe 与具有数据库驱动后端(没有 API,但 MVC)的应用程序一起使用。

我想在 运行 测试之前在数据库中设置和拆卸设置。这可以通过在我的应用程序上调用 URL 来解决(例如 https://myapp.local/setup?foo=bar or https://myapp.local/teardown?foo=bar

我想在 运行 测试之前从 Testcafe 中调用这些 URLS。我看过模块 testcafe-once-hook(https://github.com/DevExpress/testcafe-once-hook) and the accompanying examples (https://github.com/AlexKamaev/testcafe-once-hook-example)

import { oncePerFixture } from 'testcafe-once-hook';

const setupDb = oncePerFixture(async t => {
    await t.navigateTo('https://myapp.local/setup?foo=bar');
});


fixture `Setup db`
    .before(() => {
        setupDb;
    })

    test('Test1', async t => {
        /* Test 1 Code */
    });

但是从我的 Apache 日志文件中可以看出,setupDb 中的 URL 从未被调用。

我也查看了 https://github.com/DevExpress/testcafe/issues/1345#issuecomment-338796731,但这里也从未调用过 URL,正如我从我的 Apache 日志文件中看到的那样。

fixture `Setup db`
    .before(async ctx => {
        ctx.hasSetup = false;
        // Server-side actions
    })
    .beforeEach( async t => {
        if (!t.fixtureCtx.hasSetup) {
            await t.navigateTo('https://myapp.local/setup?foo=bar');
            t.fixtureCtx.hasSetup = true;
        }
        else {
            return t;
        }
    })

如何实现预先调用 https://myapp.local/setup?foo=bar

我检查了您的代码并发现了一些可能导致不正确行为的错误。 我修改了你的代码,请检查:

import { oncePerFixture } from 'testcafe-once-hook';

const setupDb = oncePerFixture(async t => {
    await t.navigateTo('https://myapp.local/setup?foo=bar');
});


fixture `Setup db`
    .beforeEach(setupDb);


fixture `Setup db`
    .beforeEach(async t => {
        await setupDb(t);
     });

目前我运行 testcafe@6.14.11testcafe-once-hook@0.0.4 这解决了我的问题。