เปลี่ยนการหมดเวลาเริ่มต้นของมอคค่า


161

หากเรามีไฟล์ทดสอบหน่วย my-spec.js และทำงานกับมอคค่า:

mocha my-spec.js

การหมดเวลาเริ่มต้นจะเป็น 2000 มิลลิวินาที สามารถเขียนทับสำหรับการทดสอบบางส่วนด้วยพารามิเตอร์บรรทัดคำสั่ง:

mocha my-spec.js --timeout 5000

เป็นไปได้หรือไม่ที่จะเปลี่ยนการหมดเวลาเริ่มต้นทั่วโลกสำหรับการทดสอบทั้งหมด? เช่นค่าการหมดเวลาเริ่มต้นจะแตกต่างจาก 2000 ms เมื่อคุณโทร:

mocha my-spec.js

เว็บไซต์ทางการของ Mocha ยังอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้
RaviRokkam

คำตอบ:


305

โดยค่าเริ่มต้น Mocha จะอ่านไฟล์ชื่อtest/mocha.optsที่สามารถมีอาร์กิวเมนต์บรรทัดคำสั่ง ดังนั้นคุณสามารถสร้างไฟล์ดังกล่าวที่มี:

--timeout 5000

เมื่อใดก็ตามที่คุณเรียกใช้ Mocha ที่บรรทัดคำสั่งมันจะอ่านไฟล์นี้และตั้งค่าการหมดเวลา 5 วินาทีโดยค่าเริ่มต้น

อีกวิธีหนึ่งที่อาจดีกว่าขึ้นอยู่กับสถานการณ์ของคุณคือตั้งค่าแบบนี้ในการdescribeเรียกระดับสูงสุดในไฟล์ทดสอบของคุณ:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

สิ่งนี้จะช่วยให้คุณสามารถตั้งค่าการหมดเวลาได้เฉพาะบนพื้นฐานต่อไฟล์

คุณสามารถใช้ทั้งสองวิธีหากคุณต้องการค่าเริ่มต้นทั่วโลกที่ 5,000 แต่ตั้งค่าบางอย่างที่แตกต่างกันสำหรับบางไฟล์


โปรดทราบว่าโดยทั่วไปคุณไม่สามารถใช้ฟังก์ชั่นลูกศรหากคุณต้องการโทรthis.timeout(หรือเข้าถึงสมาชิกคนอื่น ๆ ของthisมอคค่าที่คุณตั้งไว้) เช่นนี้มักจะไม่ทำงาน :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

นี่เป็นเพราะฟังก์ชั่นลูกศรใช้thisจากขอบเขตที่ฟังก์ชั่นปรากฏขึ้น Mocha จะเรียกใช้ฟังก์ชันด้วยค่าที่ดีthisแต่ไม่ได้ส่งผ่านค่าภายในฟังก์ชันลูกศร เอกสารสำหรับ Mocha พูดในหัวข้อนี้ :

ผ่านฟังก์ชั่นลูกศร (“ lambdas”) ไปยัง Mocha เนื่องจากการเชื่อมโยงศัพท์ของฟังก์ชันนี้จึงไม่สามารถเข้าถึงบริบท Mocha


1
ขอบคุณสำหรับข้อมูล แต่ฉันพยายามแก้ไขไฟล์ mocha.opts แต่มันไม่ส่งผลกระทบ
lm

2
คุณสร้างมันในที่ที่ถูกต้องหรือไม่? มอคค่ามีความเฉพาะเจาะจงมากเกี่ยวกับตำแหน่งที่ต้องการไฟล์นี้ ถ้าคุณเรียกใช้ Mocha ใน/home/me/src/proj/Mocha ก็จะค้นหาไฟล์นี้:/home/me/src/proj/test/mocha.opts
Louis

ขอบคุณมาก . ตอนนี้การเปลี่ยนแปลงได้รับผลกระทบ
lm

this.timeout (10000); // หมดเวลาเริ่มต้น ^ TypeError: this.timeout ไม่ได้เป็นฟังก์ชั่นใน Suite <ไม่ระบุชื่อ> (/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10).
เจฟฟ์ โลเวอรี่

6
@JeffLowery คุณใช้ฟังก์ชันลูกศรหรือไม่ ฟังก์ชั่นลูกศรไม่ได้สร้างขึ้นมาใหม่thisซึ่งมักจะส่งผลให้เกิดthis.timeoutความล้มเหลวเหมือนที่คุณแสดงในความคิดเห็นของคุณ
หลุยส์

62

เพียงเพิ่มคำตอบที่ถูกต้องคุณสามารถตั้งค่าการหมดเวลาด้วยฟังก์ชันลูกศรดังนี้:

it('Some test', () => {

}).timeout(5000)

7
คำถามคือ "เปลี่ยนค่าเริ่มต้นหมดเวลาทั่วโลกสำหรับการทดสอบทั้งหมด" คำตอบของคุณเปลี่ยนเพียงหนึ่งการทดสอบ describe('suite', () => {...}).timeout(5000)ไม่ทำงาน
aleung

เช่นเดียวกับคำตอบก่อนหน้านี้การแก้ปัญหาที่เสนอนั้นไม่ได้ผล mochajs.org/#timeoutsบอกให้ใส่setTimeoutคำแนะนำที่ชัดเจนในการทดสอบ
Marco Faustinelli

สิ่งนี้ใช้ได้กับฉันด้วยมอคค่า @ 5 (สำหรับการทดสอบเฉพาะ)
เฟอร์นันโดกาเบรี

@MarcoFaustinelli คุณเข้าใจเอกสารผิด setTimeouts ไม่มีส่วนเกี่ยวข้องกับ Mocha พวกเขาอยู่ที่นั่นเพื่อแสดงให้เห็นถึงผลกระทบของการตั้งค่าการหมดเวลา
oligofren

33

การเพิ่มสิ่งนี้เพื่อความสมบูรณ์ หากคุณ (เช่นฉัน) ใช้สคริปต์ในpackage.jsonไฟล์ของคุณเพียงเพิ่ม--timeoutตัวเลือกในมอคค่า:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

จากนั้นคุณสามารถเรียกใช้npm run testเพื่อเรียกใช้ชุดทดสอบของคุณโดยตั้งค่าการหมดเวลาเป็น 10,000 มิลลิวินาที


ในกรณีที่ใครสนใจ IDEs ส่วนใหญ่ยังอนุญาตให้คุณเลือกตัวเลือกมอคค่าสำหรับการทดสอบ เช่นสำหรับ WebStorm คุณสามารถป้อนสิ่งนี้ (เช่น "- หมดเวลา 10,000") ภายใต้ Run-> แก้ไขการกำหนดค่า -> ตัวเลือก Mocha เพิ่มเติม
Rubicon

25

ในรุ่นปัจจุบันของ Mocha การหมดเวลาสามารถเปลี่ยนแปลงได้ทั่วโลกดังนี้:

mocha.timeout(5000);

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


mocha.setupในรุ่นเก่าและเฉพาะในเบราว์เซอร์ที่คุณสามารถเปลี่ยนการกำหนดค่าใช้ทั่วโลก

mocha.setup({ timeout: 5000 });

เอกสารไม่ครอบคลุมถึงการตั้งค่าหมดเวลาทั่วโลก แต่ข้อเสนอไม่กี่ตัวอย่างเกี่ยวกับวิธีการเปลี่ยนหมดเวลาในสถานการณ์ทั่วไปอื่น ๆ


5
สิ่งนี้ไม่ทำงานในโหนด ดูstackoverflow.com/a/47915119/893113 ดูเหมือนว่าตัวเลือก CLI เป็นวิธีเดียวเท่านั้น
paulmelnikow

ฉันไม่ทำงานในเบราว์เซอร์เช่นกัน ณ วันนี้เอกสารที่เชื่อมโยงในคำตอบไม่ได้พูดถึงtimeoutพารามิเตอร์ใด ๆ ในทางตรงกันข้ามmochajs.org/#timeoutsบอกให้แทรกsetTimeoutคำแนะนำที่ชัดเจนในการทดสอบ
Marco Faustinelli

@MarcoFaustinelli คุณเข้าใจเอกสารผิด setTimeouts ไม่มีส่วนเกี่ยวข้องกับ Mocha พวกเขาอยู่ที่นั่นเพื่อแสดงให้เห็นถึงผลกระทบของการตั้งค่าการหมดเวลา
oligofren
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.