【发布时间】:2018-08-22 09:55:13
【问题描述】:
我发现当使用jest.doMock 而不是jest.mock 模拟一个函数时(我需要在不同的it 块中为同一个函数创建多个模拟实现),我发现测试失败了
错误
expect(jest.fn()).toBeCalled()
Expected mock function to have been called.
另外,如果我需要在测试顶部的模块而不是在同一个 it 块中执行它,它会给我一个不同的错误:
expect(jest.fn())[.not].toBeCalled()
jest.fn() value must be a mock function or spy.
Received:
function: [Function headObject]
代码
-
headObject(被嘲笑的合作者)
// NOT IMPLEMENTED YET module.exports = function() {} -
测试代码
it('checks to see if a resource exists when given a threshold', () => { jest.doMock('../s3/headObject', () => { return jest.fn(() => {}) }) const headObject = require('../s3/headObject') handler(event.correct_uses_propertyId_withExplicitThreshold, {}, () => {}) expect(headObject).toBeCalled() }) -
源代码
const headObject = require('../s3/headObject') module.exports = async function(event, context, callback) { headObject() }
以前
我使用环境变量在__mocks__ 中使用模拟来更改模拟实现,如下所示:
const result = jest.genMockFromModule('../realModule.js')
const mockResponse = require('../../eventMocks/realModuleName/fixture.json')
function mock (bearerToken, address) {
if (process.env.DONT_USE_TEST_ONLY_EMPTY_ESTIMATE) {
return {
history: []
}
}
return mockResponse
}
result.mockImplementation(mock)
module.exports = result
在我的测试中,我会:
it('does not store empty results in S3', () => {
process.env.DONT_USE_TEST_ONLY_EMPTY_ESTIMATE = true
const res = LambdaTester(handler)
.event(event.correct_uses_address)
.expectResult(r => {
expect(r.statusCode).toEqual(404)
const body = JSON.parse(r.body)
expect(body.message).toEqual(NO_ESTIMATE)
})
process.env.DONT_USE_TEST_ONLY_EMPTY_ESTIMATE = false
return res
})
【问题讨论】:
标签: javascript node.js mocking environment-variables jestjs