开玩笑模拟 returns 一个对象的函数
jest mock function that returns an object
我有一个函数return是一个对象
function getSettings() {
return {
foo: 'bar'
}
}
我有一个函数在内部使用上面的函数
function myFunction() {
const { foo } = getSettings()
return foo
}
我有一个测试想改变foo
的值
it('', async () => {
const value = '123'
const fooObj = {value: '123'}
jest.spyOn(getSettings, 'foo').mockReturnValue(fooObj )
const result = myFunction()
expect(result).toBe(value)
})
但这不起作用。知道如何模拟 getSettings
的 return 值吗?
问题编辑(附上错误图片)和代码更新后
你做不到 jest.spyOn(getSettings, 'foo')
你需要把 object/module 放在第一个参数中,第二个参数应该是函数名。
您可以通过将其更改为来测试它:
const fileWithGetSetting = require('<your-path>');
it('', async () => {
// the key should be foo and not value
const fooObj = {foo: '123'}
jest.spyOn(fileWithGetSetting, 'getSettings').mockReturnValue(fooObj)
const result = myFunction()
expect(result).toBe(fooObj.foo)
})
如果 foo
是原始的(就像在你的测试中),你需要更新对象 属性 如果值
function myFunction() {
const settings = getSettings()
// operation on setting.foo (if foo is primitive)
return setting.foo
}
并在测试中传递对象而不是原始值
it('', async () => {
const obj = {foo: '123'}
jest.spyOn(getSettings, 'foo').mockReturnValue(obj)
const result = myFunction()
expect(result).toBe(obj.foo)
})
当您在测试中通过 foo
时,您通过了值传递,您需要通过引用传递它
我有一个函数return是一个对象
function getSettings() {
return {
foo: 'bar'
}
}
我有一个函数在内部使用上面的函数
function myFunction() {
const { foo } = getSettings()
return foo
}
我有一个测试想改变foo
it('', async () => {
const value = '123'
const fooObj = {value: '123'}
jest.spyOn(getSettings, 'foo').mockReturnValue(fooObj )
const result = myFunction()
expect(result).toBe(value)
})
但这不起作用。知道如何模拟 getSettings
的 return 值吗?
问题编辑(附上错误图片)和代码更新后
你做不到 jest.spyOn(getSettings, 'foo')
你需要把 object/module 放在第一个参数中,第二个参数应该是函数名。
您可以通过将其更改为来测试它:
const fileWithGetSetting = require('<your-path>');
it('', async () => {
// the key should be foo and not value
const fooObj = {foo: '123'}
jest.spyOn(fileWithGetSetting, 'getSettings').mockReturnValue(fooObj)
const result = myFunction()
expect(result).toBe(fooObj.foo)
})
如果 foo
是原始的(就像在你的测试中),你需要更新对象 属性 如果值
function myFunction() {
const settings = getSettings()
// operation on setting.foo (if foo is primitive)
return setting.foo
}
并在测试中传递对象而不是原始值
it('', async () => {
const obj = {foo: '123'}
jest.spyOn(getSettings, 'foo').mockReturnValue(obj)
const result = myFunction()
expect(result).toBe(obj.foo)
})
当您在测试中通过 foo
时,您通过了值传递,您需要通过引用传递它