#node.js #automated-tests #integration-testing #e2e-testing #testcafe
#node.js #автоматизированные тесты #интеграция-тестирование #e2e-тестирование #testcafe
Вопрос:
У меня есть файл, tests.js
который содержит некоторые test(...)
определения. Я хочу повторно использовать эти тесты в нескольких устройствах, предпочтительно без внесения каких-либо изменений в исходный код.
Итак, я написал, main.js
который определяет устройство и импортирует tests.js
, тем самым «собирая» набор тестов. (В случае, если это сработает, я мог бы написать разные файлы драйверов с разными устройствами, импортируя одно и то же tests.js
изнутри каждого.)
Однако я получаю test is not defined
ошибку при попытке выполнить main.js
:
C:WindowsTempdummy>testcafe chrome main.js --debug-on-fail
ERROR Cannot prepare tests due to an error.
ReferenceError: test is not defined
at Object.<anonymous> (C:WindowsTempdummytests.js:1:1)
at Object.<anonymous> (C:WindowsTempdummymain.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 entrypoint? Или мне действительно нужно будет изменить мой tests.js
файл, чтобы это заработало? Возможно, добавив определения тестов в метод и вызвав его изнутри main.js
— как в исходном примере кода этой проблемы?
Ответ №1:
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();
Смотрите также: Организация тестов
Комментарии:
1. Спасибо — я боялся, что в конечном итоге все сведется к этому : ( Единственное, чего я не понимаю, это почему / каким образом импортированный файл не относится к «области тестирования»; поскольку, AFAIU,
tests.js
импортируется и выполняется синхронно с помощьюmain.js
, которая уже находится в «области тестирования» TestCafe.2. @Janaka, это связано с тем, что весь ваш тестовый код перенесен в vanilla JS. Выполняется код, являющийся результатом этого переноса.
3. Спасибо @hdorgeval! Это также проясняет многие другие проблемы, которые у меня были с TestCafe 🙂
Ответ №2:
Попробуйте добавить опцию --disable-test-syntax-validation
в командной строке TestCafe
(работает только в последней версии TestCafe).
Комментарии:
1. Спасибо — к сожалению, я включен
0.20.0
, но, надеюсь, это поможет кому-то еще 🙂