TestCafe: mengimpor tes dari file lain ke perlengkapan saat ini

Saya memiliki file tests.js yang berisi beberapa definisi test(...). Saya ingin menggunakan kembali pengujian ini di beberapa perlengkapan, sebaiknya tanpa membuat modifikasi apa pun pada kode aslinya.

Jadi saya menulis main.js yang mendefinisikan perlengkapan dan mengimpor tests.js, sehingga "merakit" rangkaian pengujian. (Jika berhasil, saya dapat menulis file driver berbeda dengan perlengkapan berbeda, mengimpor tests.js yang sama dari masing-masing file.)

Namun, saya mendapatkan kesalahan test is not defined saat mencoba menjalankan 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.

Sampel minimal:

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

Saya sudah mencoba:

  • menghapus peretasan komentar blok (test();) - yang menghasilkan ERROR No tests to run. Either the test files contain no tests or the filter function is too restrictive.
  • memindahkan impor tests.js ke atas - masih menghasilkan test is not defined
  • mengimpor testcafe dari dalam main.js dan tests.js - kesalahan yang sama

Apakah ada cara untuk membuat fungsi test "terlihat" oleh file lain yang diimpor oleh file titik masuk testcafe? Atau apakah saya benar-benar perlu memodifikasi file tests.js saya agar ini berfungsi? Mungkin dengan menambahkan definisi pengujian ke dalam suatu metode, dan menjalankannya dari dalam main.js - seperti pada contoh kode asli masalah ini?


person Janaka Bandara    schedule 28.03.2019    source sumber


Jawaban (2)


TestCafe tidak mengizinkan pemanggilan fungsi fixture dan test di luar cakupan pengujian. Anda dapat menggabungkan pengujian Anda dari file tests.js ke dalam suatu fungsi dan memanggil fungsi ini di file main.js:

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

defineTests();

Lihat juga: Mengatur Tes

person Andrey Belym    schedule 28.03.2019
comment
Terima kasih - Saya khawatir pada akhirnya akan menjadi seperti ini :( Namun, ada satu hal yang saya tidak mengerti adalah mengapa/bagaimana file yang diimpor tidak termasuk dalam lingkup pengujian; karena, AFAIU, tests.js diimpor dan dieksekusi secara serempak oleh main.js, yang sudah ada dalam lingkup pengujian TestCafe. - person Janaka Bandara; 30.03.2019
comment
@Janaka, ini disebabkan oleh fakta bahwa semua kode pengujian Anda ditranspilasi ke vanilla JS. Yang dieksekusi adalah kode hasil transpilasi tersebut. - person hdorgeval; 30.03.2019
comment
Terima kasih @hdorgeval! Itu juga menjelaskan banyak masalah lain yang saya alami tentang TestCafe :) - person Janaka Bandara; 30.03.2019

Coba tambahkan opsi --disable-test-syntax-validation pada baris perintah TestCafe

(hanya berfungsi di versi TestCafe terbaru).

person hdorgeval    schedule 28.03.2019
comment
Terima kasih - sayangnya saya di 0.20.0 tapi semoga ini bisa membantu orang lain :) - person Janaka Bandara; 30.03.2019