typescript - ปิดการหมดเวลาของ vitest เมื่อดีบักใน vscode
เมื่อทำงานบนการทดสอบ ฉันอาจจะรันและรันซ้ำถึง 100 ครั้งในขณะที่ทำการดีบักทีละขั้นตอน ปรับปรุงโค้ดใหม่ และตรวจสอบบางสิ่งซ้ำ แต่ระยะเวลาหมดเวลาเริ่มต้นของ vitest มีเพียง 5 วินาทีเท่านั้น และส่วนขยายของ vitest ไม่มีตัวเลือกใด (เท่าที่ฉันเห็น) ที่ให้คุณตั้งค่า test-timeout/testTimeout ของ vitest หรือเพิกเฉยต่อมันเมื่อ VSCODE_INSPECTOR_OPTIONS ถูกตั้งค่าในตัวแปรสภาพแวดล้อม
วิธีที่ฉันชอบในการดีบักการทดสอบคือคลิกขวาที่มัน แล้วเลือก "ดีบักการทดสอบ"
และฉันกำลังใช้ส่วนขยาย vscode อย่างเป็นทางการของ vitest - https://marketplace.visualstudio.com/items?itemName=vitest.explorer
มีตัวเลือกอยู่ไม่กี่อย่างที่ฉันพบว่ามันใช้ได้ ตัวเลือกแรกคือการทำ test ของพวกเขาใหม่ในไฟล์ helper.js เช่น
import { TestOptions, test as _test } from "vitest";
export function test(name: string, fn: any): void {
const options: TestOptions = {};
if (process.env.VSCODE_INSPECTOR_OPTIONS) {
options.timeout = 999999;
}
return _test(name, options, fn);
}
ฉันไม่ชอบสิ่งนี้เพราะมันเป็นฟังก์ชันที่ยุ่งเหยิงและไม่จำเป็นที่ฉันต้องนำเข้า test จาก helper แทนที่จะเป็นจาก vitest
อีกอันอยู่ในคลาส runner ซึ่งฉันตั้งค่า timeout ใน config แบบ,
import { describe, expect, it } from "vitest";
import { rebuildLeaderboardScores } from "../lib/leaderboard";
const options = {
timeout: process.env.VSCODE_INSPECTOR_OPTIONS ? 999999 : 5000,
};
describe("leaderboard functions test set", options, () => {
it("rebuilding leaderboard attempt that doesn't exist fails", () => {
expect(() => rebuildLeaderboardScores("1")).toThrowError(/leaderboard/);
});
});
อีกครั้ง ตัวนี้ใช้งานได้ดี แต่ฉันต้องมีตัวเลือกนั้นในทุกไฟล์ทดสอบ หรืออีกครั้งในไฟล์ช่วยเหลือแล้วนำเข้ามา ซึ่งฉันถือว่านั่นรกและอยากทำโดยไม่ใช้มัน
วิธีสุดท้ายซึ่งน่าจะเป็นวิธีที่พึงปรารถนาที่สุดที่ฉันพบคือการขยาย vitest.config เริ่มต้นของคุณและตั้งค่า test.testTimeout ที่นั่นดังนี้,
import config from "./vitest.config";
config.test!.testTimeout = 999999;
export default config;
แล้วจากนั้น ในการตั้งค่าของปลั๊กอิน ให้ระบุไฟล์นี้แทนไฟล์ตั้งค่ามาตรฐานของคุณ นี่เป็นตัวเลือกที่น่าจะดีที่สุดตามที่ฉันคิด แต่ฉันยังรู้สึกว่ามีตัวเลือกหรือการตั้งค่าอื่นที่ฉันพลาดไปซึ่งอาจดีกว่า มันยังคงไม่ได้ปิดการหมดเวลาอย่างแท้จริง และยังเพิ่มภาระเล็กน้อยในแง่ของไฟล์เพิ่มเติม ในแง่ของการบำรุงรักษา
ฉันรู้ว่ามีบางวิธีในการตั้งค่า test-timeout ผ่านทาง CLI แต่แม้กระทั่งนั้นก็ยังดูเหมือนไม่ทำงานถูกต้องเมื่อคุณดีบักในแบบที่ฉันทำ
ปัญหากับทั้งสองกรณีคือว่าตัวแปร timeout นั้นจะอยู่สำหรับการรันทดสอบทุกครั้งใน vscode ไม่ใช่แค่กรณีที่กำลังดีบัก/ไม่ใช่เมื่อ VSCODE_INSPECTOR_OPTIONS ถูกตั้งค่า
