如何测试这个特定的选择器?

How to test this specific selector?

我正在测试我的 NgRx 代码,在我的选择器上我有两个选择器:

export const selectSlice = (state: AppState) => state.slice;

export const selectErrors = createSelector(
  selectSlice,
  state => state.errors
);

我可以很容易地用投影仪测试 selectErrors,但我无法测试第一个,它在 Instanbul 上始终保持为 "function uncovered"。我尝试了以下方法:

it('should return call to selectSlice', () => {
    const selector = selectors.selectSlice;
    store.select(selector);

    expect(store.select).toHaveBeenCalledWith(selector);
});

我该如何测试它?

编辑:这是我对错误选择器的测试:

it('should return call to selectErrors', () => {
    const selector = selectors.selectErrors;
    store.select(selector);

    expect(store.select).toHaveBeenCalledWith(selector);
    expect(
      selector.projector({
        errors: [
          {
            message: 'Mock error'
          }
        ]
      }).length
    ).toEqual(1);
  });

该函数未被覆盖,因为您正在使用选择器的 projector 函数,该函数跳过执行选择器而仅运行投影仪函数。

要获得它的代码覆盖率,您应该:

  • 不要使用 projector 函数,因为它是一个相当简单的选择器
  • 或者如下为其编写测试(因为选择器只是一个函数,您可以调用它并测试输出):
expect(selectSlice({ slice: 'foo'})).toEqual('foo')

就我个人而言,我认为编写这些测试没有任何附加价值,而且这些测试可能很耗时 - 请参阅我的文章 How I test my NgRx selectors 了解更多信息。