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

标签 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 spy 报告它是用一个具有三个属性的对象调用的,但是当我们查看实际方法调用时,它只有一个属性?

最佳答案

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

试试这个:

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

关于vue.js - Jest spyOn 报告一个方法被调用的对象与实际调用的对象不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745383/

相关文章:

javascript - nativescript-checkbox 不会显示

vue.js - 使用文件夹的动态路由中的可选 slug

javascript - console.log 中出现 Axios Stop 404 错误

javascript - Jest/eslint 中函数缺少返回类型

javascript - Jest 单元测试 'Function' 返回 SyntaxError : Unexpected identifier at Function (<anonymous>)

javascript - 如何使用 Vue.js 初始化 google OAuth 客户端?

javascript - 单击第二个按钮后,VueJs 不删除图像

javascript - Jest css-modules SyntaxError : Unexpected token

javascript - 如何测试元素(标签)是否用 jest/enzyme 渲染?

javascript - 仅对某些文件/目录使用 ESLint 插件