小编Eug*_*akh的帖子

有没有一种方法可以正确模拟重新选择选择器以进行单元测试?

我的项目中有一个非常复杂的选择器结构(一些选择器可能具有多达5个嵌套层),因此其中一些很难通过传递输入状态进行测试,而我想模拟输入选择器。但是我发现这是不可能的。

这是最简单的示例:

// selectors1.js
export const baseSelector = createSelector(...);
Run Code Online (Sandbox Code Playgroud)

--

// selectors2.js
export const targetSelector = createSelector([selectors1.baseSelector], () => {...});
Run Code Online (Sandbox Code Playgroud)

我想在测试套件中拥有什么:

beforeEach(() => {
  jest.spyOn(selectors1, 'baseSelector').mockReturnValue('some value');
});

test('My test', () => {
  expect(selectors2.targetSelector()).toEqual('some value');
});
Run Code Online (Sandbox Code Playgroud)

但是,这种方法将无法像在初始化期间targetSelector获得引用那样工作selectors1.baseSelectorselectors2.js并且在模拟selectors1.baseSelector之后将其分配给它。

我现在看到2种可行的解决方案:

  1. 用来模拟整个selectors1.js模块jest.mock,但是,如果我需要在selectors1.baseSelector某些特定情况下更改输出,它将无法正常工作
  2. 像这样包装每个依赖选择器:

export const targetSelector = createSelector([(state) => selectors1.baseSelector(state)], () => {...});
Run Code Online (Sandbox Code Playgroud)

但是出于显而易见的原因,我不太喜欢这种方法。

因此,接下来的问题是:是否有机会模拟重新选择选择器以进行单元测试?

javascript unit-testing jestjs reselect

3
推荐指数
1
解决办法
1375
查看次数

如何为多个包创建通用声明文件?

我有一个项目,由多个包和一个通用包组成。我在每个包中都有完全相同的声明文件:

declare module '*.scss' {
  const styles: { [className: string]: string };
  export default styles;
}
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标是将此声明移至公共包或其他公共类型包,以便 TypeScript 在使用此公共包的每个包中自动识别它们。

有办法实现吗?

先感谢您!

typescript typescript-typings

2
推荐指数
1
解决办法
1357
查看次数