TestCafe: импорт тестов из другого файла в текущее устройство

#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 , но, надеюсь, это поможет кому-то еще 🙂