如何监视另一个函数中使用的函数?
How to spy on a function used in another function?
我有一个包含源代码的文件 foo.ts
和一个名为 foo.test.ts
的测试文件
foo.ts
function bar(argument: arg): boolean {
return true
}
async function foo(argument: arg) {
if (bar(argument)) {
await promiseRequest()
}
}
我正在尝试以这样一种方式对 bar()
进行存根,即当调用 foo(argument)
时 bar()
returns false。
我浏览了 Jest documentation 并尝试根据那里的方法实施,但是当我在 foo.test.ts
文件中调用 foo(argument)
时它们不起作用。
我该怎么做?
不可能对在定义的同一模块中使用的函数执行此操作,除非它是一种可以在对象上进行监视的方法。
foo
和bar
需要一起测试,或者拆分到不同的模块用jest.mock
.
mock
你可以为此使用依赖注入。
foo.ts
function bar(argument: arg): boolean {
return true
}
async function foo(argument, bar = bar) {
if (bar(argument)) {
await promiseRequest()
}
}
export const Foo = {
bar,
foo
}
然后在你的测试文件中你可以mock/stub bar()
以下方式:
foo.test.ts
test('Test for foo()', () => {
const mockBar = jest.fn().mockReturnValue(value)
expect(Foo.foo(arg, mockBar)).toBe(expectation)
})
我有一个包含源代码的文件 foo.ts
和一个名为 foo.test.ts
foo.ts
function bar(argument: arg): boolean {
return true
}
async function foo(argument: arg) {
if (bar(argument)) {
await promiseRequest()
}
}
我正在尝试以这样一种方式对 bar()
进行存根,即当调用 foo(argument)
时 bar()
returns false。
我浏览了 Jest documentation 并尝试根据那里的方法实施,但是当我在 foo.test.ts
文件中调用 foo(argument)
时它们不起作用。
我该怎么做?
不可能对在定义的同一模块中使用的函数执行此操作,除非它是一种可以在对象上进行监视的方法。
foo
和bar
需要一起测试,或者拆分到不同的模块用jest.mock
.
你可以为此使用依赖注入。
foo.ts
function bar(argument: arg): boolean {
return true
}
async function foo(argument, bar = bar) {
if (bar(argument)) {
await promiseRequest()
}
}
export const Foo = {
bar,
foo
}
然后在你的测试文件中你可以mock/stub bar()
以下方式:
foo.test.ts
test('Test for foo()', () => {
const mockBar = jest.fn().mockReturnValue(value)
expect(Foo.foo(arg, mockBar)).toBe(expectation)
})