使用Vitest的expect.closeTo报错:expect.closeTo is not a function
问题解决:Vitest中
expect.closeTo报错及TypeScript类型错误 你遇到的两个错误(TypeError: expect.closeTo is not a function和TS的Property 'closeTo' does not exist on type 'ExpectStatic')原因一致:closeTo不是expect的静态方法,而是断言实例的链式方法,同时你用toBe比较对象的方式也不正确。
错误原因拆解
closeTo的正确用法是expect(实际数值).closeTo(预期数值, 精度),而非直接调用expect.closeTo()toBe用于严格相等判断,两个对象字面量(比如{value:3}和{value: ...})是不同的引用,永远不会匹配,应该用toEqual做结构相等校验
修正后的代码
import { describe, it, expect } from "vitest"; describe("sum test", () => { it("adds 1 + 2 to equal 3", () => { // 方式1:直接提取数值做近似断言 const result = 1 + 2; expect(result).closeTo(3); }); it("对象中的数值近似相等", () => { // 方式2:对对象属性单独做近似断言 const obj = { value: 1 + 2 }; expect(obj.value).closeTo(3); // 方式3:结合objectContaining对对象结构做校验 expect(obj).toEqual(expect.objectContaining({ value: expect.closeTo(3) })); }); });
补充说明
你的Vitest版本(0.34.0)完全支持closeTo方法,但必须遵循正确的调用方式:只有在expect(xxx)返回的断言对象上,才能调用closeTo这类链式断言方法。
内容的提问来源于stack exchange,提问作者yolisses
相关产品推荐
相关产品推荐

