我在测试中遇到了嘲笑常量的问题。我有一个带有应用程序配置的文件。只有具有某些值的键,仅此而已。
appConfig.js
//imports
...
export const CASHING_AMOUNT_LIMIT = 50;
export const CASHING_DELETE_AMOUNT = 25;
...
这就是我要测试的减速器:
减速器.js
import {
CASHING_AMOUNT_LIMIT,
CASHING_DELETE_AMOUNT,
} from '../appConfig';
...
export const reducer = handleActions({
[REQUEST_DATA]: (state, action) => {
if (payload.count >= CASHING_AMOUNT_LIMIT) {
// do something with data if the condition is true
}
return {
...someState,
};
},
...
在我的测试中,我想更改CASHING_AMOUNT_LIMIT
的值,并检查reducer是否返回当前存储。我不知道如何在reducer.js
中模拟这个变量。这是我的测试:
...//imports
const mockValues = {
CASHING_AMOUNT_LIMIT: 10,
CASHING_DELETE_AMOUNT: 5,
};
jest.mock('../../appConfig.js', () => mockValues);
const {
CASHING_AMOUNT_LIMIT,
CASHING_DELETE_AMOUNT,
} = require('../../appConfig.js');
...
it('MY awesome test ', () => {
expect(CASHING_AMOUNT_LIMIT).toBe(10);
expect(CASHING_DELETE_AMOUNT).toBe(5);
// HERE is all ok CASHING_AMOUNT_LIMIT = 10 and the second variable is 5
// tests are OK
// ....
expect(storeWithCache.dispatch(requestFunction({ test: 'XX'})))
.toEqual(myStore);
...
最后,我使用dispatch
,它在reducer.js
中调用我的reducer操作和函数,它运行正常……但对于CASHING_AMOUNT_LIMIT
的旧值,它仍然是50(如在appConfig.js
中),我需要设置10
有人能帮我在reducer.js
中嘲笑CASHING_AMOUNT_LIMIT
吗?
本部分
jest.mock('../../appConfig.js', () => mockValues);
需要在描述块之外,在导入下。
我有一个解决方案,我们在一个文件testenv.js
中有所有mock,它正在全局导入,我把jest.mock('../../appConfig.js')
放在那里,它就工作了!