Jest spyOn报告一个方法被调用的对象与实际调用的对象不同

时间:2018-08-08 11:18:42

标签: vue.js jestjs

我正在使用Jest spyOn来跟踪Vue路由器上的方法。我正在测试的Vue方法如下:

myMethod() {
  this.$router.push({ name: "login" });
}

我想确保调用了$router.push,所以在我的测试中,我有这个意思:

const spy = jest.spyOn(wrapper.vm.$router, 'push');
expect(spy).toHaveBeenCalledWith({ name: "login" });

但是此测试失败,并显示以下错误:

Expected mock function to have been called with:
        {"name": "login"}
      as argument 1, but it was called with
        {"name": "login", "params": {}, "path": "/login"}.

没问题,我可以将测试更新为以下内容,并且可以正常工作:

expect(spy).toHaveBeenCalledWith({
  name: "login",
  params: {},
  path: "/login"
});

我的问题是:为什么Jest间谍报告说它是用具有三个属性的对象调用的,但是当我们看实际的方法调用时,它只有一个属性?

1 个答案:

答案 0 :(得分:1)

vue-routerparamspath属性添加一些默认值。使用spyOn时,您还将检测到其他由vue-router分配的参数。如果将显式spy添加到push方法中,则只会看到name属性。

尝试一下:

const spy = jest.fn();
wrapper.vm.$router.push = spy;
expect(spy).toHaveBeenCalledWith({ name: "login" });