我的项目中有一个非常复杂的选择器结构(一些选择器可能具有多达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.baseSelector,selectors2.js并且在模拟selectors1.baseSelector之后将其分配给它。
我现在看到2种可行的解决方案:
selectors1.js模块jest.mock,但是,如果我需要在selectors1.baseSelector某些特定情况下更改输出,它将无法正常工作export const targetSelector = createSelector([(state) => selectors1.baseSelector(state)], () => {...});
Run Code Online (Sandbox Code Playgroud)
但是出于显而易见的原因,我不太喜欢这种方法。
因此,接下来的问题是:是否有机会模拟重新选择选择器以进行单元测试?
我有一个项目,由多个包和一个通用包组成。我在每个包中都有完全相同的声明文件:
declare module '*.scss' {
const styles: { [className: string]: string };
export default styles;
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标是将此声明移至公共包或其他公共类型包,以便 TypeScript 在使用此公共包的每个包中自动识别它们。
有办法实现吗?
先感谢您!