我发现我正在使用的模拟将返回一个字符串,它似乎返回jest.fn()而不是模拟的“实现” jest.fn().mockImplementation(...)。
我这样称呼它:
const mockDefaultQuery = 'query { mock }'
jest.mock('../functions', () => (
{
getArticle: jest.fn().mockName('getArticle').mockImplementation(() => {
return {}
}),
defaultQuery: jest.fn().mockImplementation(() => {
return mockDefaultQuery
})
})
)
Run Code Online (Sandbox Code Playgroud)
但是从导入的“functions”库调用defaultQuery会在测试范围中返回[Function mockConstructor],而不是由它应该返回的const定义的“query {mock }”。
我也尝试过使用jest.fn().mockReturnValue(mockDefaultQuery)但没有效果。
问题是jest.mock在编译过程中它将被提升到测试文件的顶部,看看这里。因此,您永远不能在模拟定义内的模块范围内使用某些内容。所以你的代码是这样评估的
jest.mock('../functions', () => (
{
getArticle: jest.fn().mockName('getArticle').mockImplementation(() => {
return {}
}),
defaultQuery: jest.fn().mockImplementation(() => {
return mockDefaultQuery
})
})
)
const mockDefaultQuery = 'query { mock }'
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我通常做的是创建一个空的模拟并随后填充它:
jest.mock('../functions', () => jest.fn())
import myFunction from '../functions'
const mockDefaultQuery = 'query { mock }'
myFunction.mockImplementation( () => (
{
getArticle: jest.fn().mockName('getArticle').mockImplementation(() => {
return {}
}),
defaultQuery: jest.fn().mockImplementation(() => {
return mockDefaultQuery
})
}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9186 次 |
| 最近记录: |