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
  • импорт testcafe из main.js и tests.js - та же ошибка

Есть ли способ сделать функцию test "видимой" для других файлов, импортированных файлом точки входа testcafe? Или мне действительно нужно будет изменить мой tests.js файл, чтобы он заработал? Возможно, добавив определения тестов в метод и вызвав его из main.js - как в исходном образце кода эта проблема?


person Janaka Bandara    schedule 28.03.2019    source источник


Ответы (2)


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();

См. Также: Организация тестов

person Andrey Belym    schedule 28.03.2019
comment
Спасибо - я боялся, что это в конечном итоге сведется к следующему :( Однако я не понимаю одной вещи: почему / как импортированный файл не принадлежит области тестирования; поскольку AFAIU, tests.js импортируется и выполняется синхронно с помощью main.js, который уже находится в области тестирования TestCafe. - person Janaka Bandara; 30.03.2019
comment
@Janaka, это связано с тем, что весь ваш тестовый код перенесен на ванильный JS. Выполняется код, полученный в результате этой транспиляции. - person hdorgeval; 30.03.2019
comment
Спасибо @hdorgeval! Это также проясняет многие другие проблемы, которые у меня были с TestCafe :) - person Janaka Bandara; 30.03.2019

Попробуйте добавить параметр --disable-test-syntax-validation в командную строку TestCafe

(работает только в последней версии TestCafe).

person hdorgeval    schedule 28.03.2019
comment
Спасибо - к сожалению, я на 0.20.0, но, надеюсь, это поможет кому-то другому :) - person Janaka Bandara; 30.03.2019