首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟在测试模块中导入的varible,并且它不是函数参数(使用describe.each并在每个测试中更改模拟值)

如何模拟在测试模块中导入的varible,并且它不是函数参数(使用describe.each并在每个测试中更改模拟值)
EN

Stack Overflow用户
提问于 2019-01-25 06:30:10
回答 1查看 102关注 0票数 1

我需要测试我的ts-模块的功能。

module-to-test.ts

代码语言:javascript
复制
import { config } from './app-config';

export const isSomethingWhatINeedSelector = createSelector(
    firstDependencySelector,
    secondDependencySelector,
    (first, second) => config.key && (first || !second)
);

但是我不想为这种情况编写很多测试,我想尝试使用describe.each([[],[],[]])功能来减少代码行数。

我需要在config.key的每次迭代中更改describe.each。当我在测试文件开始时这样做:

代码语言:javascript
复制
jest.mock('./app-config', () => ({
    config: {
        key : false,
    },
}));

它适用于整个文件和所有测试。我希望在"test/it“函数中进行模拟,以动态更改键的值。

现在我有了代码,和预期的一样,doesn't work

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 13:14:53

探索ES6中的两个重要概念(也适用于TypeScript模):

在ES6中,导入是导出值的实时只读视图。

虽然不能更改导入的值,但可以更改它们所引用的对象。

app-config导出config,这是一个对象。

不能将config分配给其他对象,但它所引用的对象可以更改。

导入config的任何代码都将获得该对象的活动视图,并将自动看到对该对象的任何修改:

代码语言:javascript
复制
import { config } from './app-config';

...

  it(testTitle, () => {
    config.key = mockStatusOfConfigKey;  // modify the config object
    expect(isSomethingWhatINeedSelector(state)).toBe(expected); // SUCCESS
  });
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54360027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档