我需要测试我的ts-模块的功能。
module-to-test.ts
import { config } from './app-config';
export const isSomethingWhatINeedSelector = createSelector(
firstDependencySelector,
secondDependencySelector,
(first, second) => config.key && (first || !second)
);但是我不想为这种情况编写很多测试,我想尝试使用describe.each([[],[],[]])功能来减少代码行数。
我需要在config.key的每次迭代中更改describe.each。当我在测试文件开始时这样做:
jest.mock('./app-config', () => ({
config: {
key : false,
},
}));它适用于整个文件和所有测试。我希望在"test/it“函数中进行模拟,以动态更改键的值。
现在我有了代码,和预期的一样,doesn't work
describe.each([
[
'should be ....',
true, false
],
[
'should be ....',
false, true
],
/* and etc. ... [], [], [] ... only for questnion here is two params*/
])('Functionality of ...', (
testTitle = '',
mockStatusOfConfigKey,
expected,
) => {
const state = ... /* initial */
beforeEach(() => {
jest.resetModules();
/*....configuring the state*/
});
it(testTitle, () => {
jest.mock('./app-config', () => ({ /*...or doMock(), that don't works*/
config: {
key : mockStatusOfConfigKey,
},
}));
expect(isSomethingWhatINeedSelector(state)).toBe(expected);
});
});有什么想法吗?如何使模拟在测试函数中动态更改?config.key is just true/false
发布于 2019-01-29 13:14:53
探索ES6中的两个重要概念(也适用于TypeScript模):
在ES6中,导入是导出值的实时只读视图。
和
虽然不能更改导入的值,但可以更改它们所引用的对象。
app-config导出config,这是一个对象。
不能将config分配给其他对象,但它所引用的对象可以更改。
导入config的任何代码都将获得该对象的活动视图,并将自动看到对该对象的任何修改:
import { config } from './app-config';
...
it(testTitle, () => {
config.key = mockStatusOfConfigKey; // modify the config object
expect(isSomethingWhatINeedSelector(state)).toBe(expected); // SUCCESS
});
});https://stackoverflow.com/questions/54360027
复制相似问题