【问题标题】:Variable not updating in unit test变量未在单元测试中更新
【发布时间】:2017-06-19 02:21:41
【问题描述】:

我正在进行单元测试,我想测试 redux 存储中的值是否根据我的说明进行了更新。

我的module reducer 单元测试包含多个测试套件,有些正在更新状态,有些没有,我不知道为什么......所以我经过一天的测试和研究后来到这里,看看是否有人可能知道我的错误的原因。任何建议表示赞赏。

这是我的模块缩减器代码的一部分:

export function createModuleReducer() {
  return function moduleReducer(state: PageModules = INITIAL_STATE,
    action): PageModules {
      if (!action.meta || !action.meta.status) {
        return state;
      }
      switch (action.type) {
        case INITIALIZE:

        case CREATE_SIGNATURES_ARRAY:
          return tassign(state, {signatures: action.payload['document']});

这是我的模块减速器规范代码的一部分:

const baseState = {
  signatures: []
};
let state;
…
describe('Reducer', () => {
  …
  beforeEach(async(() => {
    TestBed.configureTestingModule({
    …
    MockNgRedux.reset();
    state = JSON.parse(JSON.stringify(baseState));
  }));

  it('should call CREATE_SIGNATURES_ARRAY reducer', async(() => {
    const actionCreateSignature = {
      type: CREATE_SIGNATURES_ARRAY,
      meta: { status: 'create_signature'},
      payload: { 'document': … }
    };
    createModuleReducer()(state, actionCreateSignature);
    mockNgRedux.dispatch(actionCreateSignature);
    expect(state.signatures).toEqual(…)
  }));
}

使用console.log,我知道module reducer会相应地更新存储,但规范中的值没有改变。

【问题讨论】:

    标签: angular unit-testing typescript jasmine redux


    【解决方案1】:

    Reducer 应该是最容易测试的部分,因为它们是纯函数。
    根据您实现减速器的方式,您可能不需要 TestBed。
    您可能也不需要 MockNgRedux。我只在使用@select 的组件的测试中使用它。

    你传入reducer的状态应该只是reducer负责的fragment,在这种情况下是signatures属性吗?所以也许你的测试电话应该是

    createModuleReducer()(state.signatures, actionCreateSignature);
    

    我还建议在您的期望之前放置一个console.log(state),以查看减速器如何处理它。

    要提供更多建议,需要了解有关 createModuleReducer() 方法的更多信息。
    另外,mockNgRedux.dispatch() 看起来也不对。我看到的所有调用在 MockNgRedux(类)上都是静态的。

    【讨论】:

    • 我用 createModuleReducer 函数更新了我的答案,这是一个包含开关的函数!
    【解决方案2】:

    问题已解决,感谢 Richard Matsen 的建议和关于测试 reducer 的 redux 文档!

    我现在直接测试 createModuleReducer:

    expect(createModuleReducer()(state, actionCreateSignature).signatures).toEqual(…)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 2020-11-06
      相关资源
      最近更新 更多