【发布时间】:2019-01-15 15:24:21
【问题描述】:
我正在使用 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 间谍报告它是用具有三个属性的对象调用的,但是当我们查看实际的方法调用时,它只有一个属性?
【问题讨论】:
-
toHaveBeenCalledTimes(1)带给你什么? -
@Krimson 它通过了!
-
所以我假设它在内部被多次调用?
-
@Krimson 我正在测试的方法只调用 router.push 一次,AFAIK 不应该调用该方法。
-
哦,我明白你的意思了。我误解了你的回复