在Jest/Vitest单元测试中能否访问函数作用域内的变量?
不能直接访问
myFunction内部的foo变量 你无法在测试代码里直接获取myFunction内部的foo变量,这是JavaScript函数作用域规则决定的:函数内部用let/const声明的变量属于私有作用域,外部代码(包括你的测试逻辑)没有权限直接访问。
不过可以借助原函数的设计间接拿到foo的值:原函数会调用传入的anotherFunction并把foo作为参数传递,因此我们可以用Jest/Vitest的mock函数捕获这个参数。
修改后的测试代码示例:
import myFunction from "./myFunction.js" import { test, expect, vi } from "vitest" test("myFunction 正确传递foo值", () => { // 创建mock函数,用于捕获传入的参数 const mockFn = vi.fn() // 将mock函数传入myFunction myFunction(mockFn) // 从mock函数的调用记录中提取foo的值 const fooValue = mockFn.mock.calls[0][0] // 验证foo的值符合预期:只能是true或false expect([true, false]).toContain(fooValue) })
这种方式通过观察函数的外部交互(调用传入的回调函数)来推断内部逻辑的正确性,是测试私有内部状态的常用方案。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

