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 นี่เป็นเพราะความจริงที่ว่ารหัสทดสอบทั้งหมดของคุณถูกแปลงเป็น vanilla 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