在同一测试文件中,我需要测试实际的redux动作创建者,然后再测试是否从另一个函数调用了相同的动作创建者。
如果我jest.mock
无法测试实际值。如果不这样做,以后就无法嘲弄它。
我也尝试过将jest.spyOn
与mockImplementation
一起使用,但似乎并没有嘲笑它。
// actionsOne.js
export const myActionOne = ({
type: 'MY_ACTION_ONE'
})
// test.js
import { dispatch } from './reduxStore.js'
import { myActionOne } from './actionsOne.js'
import { myActionTwo } from './actionsTwo.js'
jest.mock('./actionsOne.js', () => ({
myActionOne: jest.fn()
}))
test('expectation 1', () => {
// would pass if no mocking is in place. fail otherwise.
expect(dispatch(myActionOne())).toEqual({
type: 'MY_ACTION_ONE'
})
})
test('expectation 2', () => {
dispatch(myActionTwo()) // say this would also dispatch myActionOne somewhere
// would pass if mocking is in place. fail otherwise.
expect(myActionOne).toHaveBeenCalled()
})
因为myActionOne
在分发时会做很多事情,所以我想对myActionTwo
进行一次测试,只需检查它是否被调用即可。
有什么建议吗?谢谢!
答案 0 :(得分:0)
好的,我可以使用jest.requireActual()
来工作:
test('expectation 1', () => {
const { myActionOne: myActionOneActual } = jest.requireActual('./actionsOne.js')
expect(dispatch(myActionOneActual())).toEqual({
type: 'MY_ACTION_ONE'
})
})
期望1 通过是因为我们使用 actual 函数进行断言。
对期望2 没有任何更改,因为它使用了模拟函数进行断言。