【问题标题】:How to mock dispatch in vueJs testing如何在 vueJs 测试中模拟调度
【发布时间】:2019-11-30 17:16:32
【问题描述】:

我目前正在对我的应用程序执行单元测试,如图所示。但我有一个问题。如何模拟或利用 Vuex 的调度?

我的测试方法:

methodA({ dispatch, commit }, { data }) {
        dispatch('methodB', { data });
    }
  };

我的单元测试:

describe('UnitTesting', () => {
  it('if method called', () => {
    const commit = jest.fn();
    const dispatch = jest.fn('methodB');
    service.actions.methodA({ dispatch, commit });
    expect(dispatch).toHaveBeenCalledTimes(1);
  });

我有一条错误消息:Dispatch 不是函数。 为什么 ?你帮帮我好吗?我不明白为什么我会收到此消息。

谢谢

【问题讨论】:

    标签: javascript unit-testing vue.js jestjs


    【解决方案1】:

    如果您还想创建一个 localVue 并让商店在您的测试中正常工作,您可以使用spyOn

    const storeDispatch = jest.spyOn(wrapper.vm.$store, 'dispatch')
    expect(storeDispatch).toHaveBeenCalledWith('module/action', {})
    

    【讨论】:

      【解决方案2】:

      jest.fn('methodB') 不是正确的调用,因此生成的 dispatch 常量不是函数。

      fn 参数应该是一个函数。 要么做jest.fn(() => Promise.resolve('functionB'))要么jest.fn().mockResolvedValue('functionB')

      但只要jest.fn() 就可以到达这里。

      【讨论】:

      • 哦,谢谢它的工作! :) 最后一个问题:我如何嘲笑 window.FB.api 以进行 facebook 登录?谢谢
      • 类似window.FB = { api: jest.fn() }; window.FB.api.mockImplementation( (path, method, params, callback) => callback({ whateverExpectedInResponse: true, }) )
      猜你喜欢
      • 2022-01-10
      • 2014-07-07
      • 2017-09-26
      • 1970-01-01
      • 2019-06-05
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多