จะเรียกใช้การทดสอบ Jest ตามลำดับได้อย่างไร?


152

ฉันกำลังทำการทดสอบ Jest ผ่านทางnpm test. Jest รันการทดสอบแบบคู่ขนานตามค่าเริ่มต้น มีวิธีใดบ้างที่จะทำให้การทดสอบดำเนินไปตามลำดับ

ฉันมีการทดสอบบางอย่างที่เรียกใช้รหัสของบุคคลที่สามที่อาศัยการเปลี่ยนไดเร็กทอรีการทำงานปัจจุบัน

คำตอบ:


235

ตัวเลือก CLI มีเอกสารjest --helpและสามารถเข้าถึงได้โดยใช้คำสั่ง

--runInBandคุณจะเห็นตัวเลือกที่คุณกำลังมองหา:


7
ขอบคุณมาก! มันคือnpm test --runInBandอะไร? Offtopic: ไม่แน่ใจว่าชื่อ "วงดนตรี" มาจากไหน --runSequentially น่าจะเข้าท่ากว่า :)
Martin Konicek

13
@MartinKonicek npm test -- --runInBandถูกต้อง
Ondrej Slinták

47
น่าเสียดายที่ความจริงที่ว่าคำสั่งการดำเนินการไม่สามารถควบคุมได้ทำให้ Jest ไม่มีประโยชน์สำหรับการทดสอบการรวม
Evan B.

22
@ อีวานความจริงที่คุณต้องการให้การทดสอบดำเนินไปตามลำดับคือกลิ่น
Nico Van Belle

26
@NicoVanBelle เป็นเพียงราคาที่คุณจ่ายสำหรับการทดสอบแบบ end-to-end ที่แท้จริงของระบบ stateful ที่ซับซ้อนเพียงพอ ฉันเปิดรับทางเลือกอื่น แต่ฉันยังไม่เห็นวิธีแก้ปัญหาที่ไม่เกี่ยวข้องกับการสลับส่วนสำคัญของสแตกอย่างไร้เดียงสาหรือการรีเซ็ตฐานข้อมูลที่ช้าอย่างห้ามไม่ได้ระหว่างการทดสอบ ไม่ได้หมายความว่า Jest เป็นเครื่องมือที่ไม่ดี แต่เป็นเครื่องมือที่ผิดสำหรับการทดสอบประเภทนี้โดยเฉพาะ
Evan B.

23

ฉันยังคงคุ้นเคยกับ Jest แต่ดูเหมือนว่าบล็อกจะทำงานพร้อมกันในขณะที่บล็อกทดสอบทำงานแบบอะซิงโครนัส ฉันกำลังเรียกใช้บล็อกอธิบายหลายรายการภายในการอธิบายด้านนอกซึ่งมีลักษณะดังนี้:

describe
    describe
        test1
        test2

    describe
        test3

ในกรณีนี้test3จะไม่ทำงานจนกว่าtest2จะเสร็จสมบูรณ์เพราะอยู่ในบล็อกอธิบายที่ตามมาอธิบายบล็อกที่มีtest3test2


2
บางทีมันอาจจะยังวิ่งคู่ขนาน
LCB

นี่มันเยี่ยมมาก ทำให้ตรวจสอบพฤติกรรมกับตัวแปรสภาพแวดล้อมที่หายไปก่อนจากนั้นตั้งค่าตัวแปรและทำการทดสอบเพิ่มเติม
Attaque

IMO นี่ควรเป็นคำตอบที่ยอมรับได้ ง่ายกว่าการจัดการกับตัวเลือก CLI หรือการกำหนดซีเควนเซอร์
ZCaceres

15

มันใช้งานได้สำหรับฉันเพื่อให้มั่นใจว่ามีการทำงานตามลำดับของการทดสอบโมดูลที่แยกจากกัน

1) ทำการทดสอบในไฟล์ที่แยกจากกัน แต่ไม่มีspec/testการตั้งชื่อ

|__testsToRunSequentially.test.js
|__tests
   |__testSuite1.js
   |__testSuite2.js
   |__index.js

2) ไฟล์ที่มีชุดทดสอบควรมีลักษณะดังนี้ (testSuite1.js):

export const testSuite1 = () => describe(/*your suite inside*/)

3) นำเข้าtestToRunSequentially.test.jsและเรียกใช้ด้วย--runInBand:

import { testSuite1, testSuite2 } from './tests'

describe('sequentially run tests', () => {
   testSuite1()
   testSuite2()
})

1
คุณไม่จำเป็นต้องรันด้วย --runInBand เนื่องจากคุณมีชุดทดสอบสองชุดแล้ว ชุดทดสอบเด็กจะดำเนินการตามลำดับ
RICKY KUMAR

10

ใช้ตัวทดสอบอนุกรม:

npm install jest-serial-runner --save-dev

ตั้งค่า jest เพื่อใช้เช่นใน jest.config.js:

module.exports = {
   ...,
   runner: 'jest-serial-runner'
};

คุณสามารถใช้คุณลักษณะโครงการเพื่อใช้กับการทดสอบชุดย่อยเท่านั้น ดูhttps://jestjs.io/docs/en/configuration#projects-arraystring--projectconfig


คุณสามารถใช้คุณลักษณะโครงการเพื่อใช้สำหรับการทดสอบเพียงบางส่วนเท่านั้น , อย่างไร?
Nux

1
@Nux การตั้งค่าคอนฟิก "โปรเจ็กต์" ใน Jest ช่วยให้คุณสามารถเลือกใช้การตั้งค่าคอนฟิกอื่น ๆ กับชุดทดสอบเฉพาะ คำตอบอัปเดตพร้อมลิงก์ไปยังเอกสารและตัวอย่าง
Joachim Lous

6

ตามที่คัดลอกมาจากhttps://github.com/facebook/jest/issues/6194#issuecomment-419837314

test.spec.js

import { signuptests } from './signup'
import { logintests } from './login'

describe('Signup', signuptests)
describe('Login', logintests)

signup.js

export const signuptests = () => {
     it('Should have login elements', () => {});
     it('Should Signup', () => {}});
}

login.js

export const logintests = () => {
    it('Should Login', () => {}});
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.