TestCafe:将测试从另一个文件导入当前的夹具

时间:2019-03-28 02:59:16

标签: node.js automated-tests integration-testing e2e-testing testcafe

我有一个文件tests.js,其中包含一些test(...)定义。我想跨多个固定装置重用这些测试,最好不要对原始代码进行任何修改。

所以我写了一个main.js,它定义了一个夹具并导入了tests.js,从而“组装”了一个测试套件。 (在可行的情况下,我可以使用不同的夹具编写不同的驱动程序文件,并从每个内部导入相同的tests.js。)

但是,尝试执行test is not defined时出现main.js错误:

C:\Windows\Temp\dummy>testcafe chrome main.js --debug-on-fail
ERROR Cannot prepare tests due to an error.

ReferenceError: test is not defined
    at Object.<anonymous> (C:\Windows\Temp\dummy\tests.js:1:1)
    at Object.<anonymous> (C:\Windows\Temp\dummy\main.js:7:1)

Type "testcafe -h" for help.

最小样本:

// tests.js

test('wait', async t => {
    await t.wait(1);
});


// main.js

fixture `here goes the name`
    .page("http://localhost:3000")
    .beforeEach(async t => {
        // do stuff
    });

import "./tests";

/*
trick testcafe to scan the file;
based on https://github.com/DevExpress/testcafe/issues/2889#issuecomment-423859785

test();
*/

我已经尝试过:

  • 删除阻止注释黑客(test();)-这会给ERROR No tests to run. Either the test files contain no tests or the filter function is too restrictive.
  • tests.js的导入移动到顶部-仍然会提供test is not defined
  • testcafemain.js内部导入tests.js-同样的错误

是否有办法使test函数对testcafe入口点文件导入的其他文件“可见”?还是我实际上需要修改我的tests.js文件才能使它正常工作?也许是通过将测试定义添加到方法中,然后像从this issue的原始代码示例中那样,从main.js内部调用它?

2 个答案:

答案 0 :(得分:3)

尝试在TestCafe命令行上添加选项--disable-test-syntax-validation

(仅在最新的TestCafe版本中有效)。

答案 1 :(得分:3)

TestCafe不允许在测试范围之外调用fixturetest函数。您可以将测试从tests.js文件包装到一个函数中,然后在main.js文件中调用此函数:

// tests.js
export default function () {
   test('Test 1', () => {});
   test('Test 2', () => {});
   test('Test 3', () => {});
}
// main.js
import defineTests from './tests';

defineTests();