ค้นหาเว็บไซต์

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 ถูกตั้งค่า