我有一个文件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
testcafe
和main.js
内部导入tests.js
-同样的错误是否有办法使test
函数对testcafe入口点文件导入的其他文件“可见”?还是我实际上需要修改我的tests.js
文件才能使它正常工作?也许是通过将测试定义添加到方法中,然后像从this issue的原始代码示例中那样,从main.js
内部调用它?
答案 0 :(得分:3)
尝试在TestCafe命令行上添加选项--disable-test-syntax-validation
(仅在最新的TestCafe版本中有效)。
答案 1 :(得分:3)
TestCafe不允许在测试范围之外调用fixture
和test
函数。您可以将测试从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();