Javascript Jasmine的spyOn toHaveBeenCalled方法的问题
有人能告诉我为什么下面的测试失败了吗Javascript Jasmine的spyOn toHaveBeenCalled方法的问题,javascript,tdd,jasmine,Javascript,Tdd,Jasmine,有人能告诉我为什么下面的测试失败了吗 var Person = function() {}; Person.prototype.helloSomeone = function(toGreet) { return this.sayHello() + " " + toGreet; }; Person.prototype.sayHello = function() { return "Hello"; }; describe("Person", function() { it("call
var Person = function() {};
Person.prototype.helloSomeone = function(toGreet) {
return this.sayHello() + " " + toGreet;
};
Person.prototype.sayHello = function() {
return "Hello";
};
describe("Person", function() {
it("calls the sayHello() function", function() {
var fakePerson = new Person();
spyOn(fakePerson, "sayHello");
fakePerson.helloSomeone("world");
expect(fakePerson.sayHello).toHaveBeenCalled();
});
});
我从他那里拿的,他说有用。我可以看到spyOn方法正在person对象上创建一个同名的包装函数,即fakePerson.sayHello正在对象上调用,而不是在原型上调用
非常感谢您的测试用例可能存在的一个问题是您没有指定应该调用原始方法。正确的行为是以下注意事项:
describe("Person", function() {
it("calls the sayHello() function", function() {
var fakePerson = new Person();
spyOn(fakePerson, "sayHello").andCallThrough();
fakePerson.helloSomeone("world");
expect(fakePerson.sayHello).toHaveBeenCalled();
});
});
有关其他可能性的更多信息,请参见Jasmine的文档页面:
编辑:快速查看将显示以下内容:
警告
jasmine sinon目前会覆盖任何用于其自身间谍功能的同名jasmine matchers。我计划允许将来有选择地保留这些文件
被覆盖的本机Jasmine匹配器包括:
被装
与…相聚
如果你想使用jasmine sinon,你必须使用他们的API,而不是jasmine的API
编辑:截至:
你也可以使用茉莉花间谍和你的西农间谍。
jasmine sinon将检测您正在使用的匹配器,并使用相应的匹配器
测试用例的一个可能问题是,您没有指定应该调用原始方法。正确的行为是以下注意事项:
describe("Person", function() {
it("calls the sayHello() function", function() {
var fakePerson = new Person();
spyOn(fakePerson, "sayHello").andCallThrough();
fakePerson.helloSomeone("world");
expect(fakePerson.sayHello).toHaveBeenCalled();
});
});
有关其他可能性的更多信息,请参见Jasmine的文档页面:
编辑:快速查看将显示以下内容:
警告
jasmine sinon目前会覆盖任何用于其自身间谍功能的同名jasmine matchers。我计划允许将来有选择地保留这些文件
被覆盖的本机Jasmine匹配器包括:
被装
与…相聚
如果你想使用jasmine sinon,你必须使用他们的API,而不是jasmine的API
编辑:截至:
你也可以使用茉莉花间谍和你的西农间谍。
jasmine sinon将检测您正在使用的匹配器,并使用相应的匹配器
测试失败了,因为我还使用了jasmine-sinon.js 测试失败,因为我也在使用jasmine-sinon.js @screenm0nkey在这种情况下,您能否更具体地说明您的期望以及测试失败时您会遇到什么错误。嗯,我希望测试能够通过,因为它应该通过。间谍没有正常工作,因为我从中复制了示例,它也失败了。我想我的设置有问题。嗨,你好。见我在原始帖子下面的评论。这与jasmine sinon.js.+1 for and callthrough@screenm0nkey有关。在这种情况下,你能更具体地说明你期望的是什么,以及测试失败时会出现什么错误。我希望测试通过,因为它应该通过。间谍没有正常工作,因为我从中复制了示例,它也失败了。我想我的设置有问题。嗨,你好。见我在原始帖子下面的评论。这与jasmine-sinon.js有关。对于andcall来说+1通过测试失败,因为我也在使用jasmine-sinon.js。还不知道为什么,但我一删除它,测试就开始工作了。嗨,screenm0nkey,你可能会感兴趣,为什么我认为在这个用例中使用ToHaveBeenCall不是最好的选择:测试失败是因为我也在使用jasmine-sinon.js。还不知道为什么,但我一删除它,测试就开始工作了。嗨,screenm0nkey,你可能会感兴趣,为什么我认为在这个用例中使用ToHaveEnCall不是最好的选择:谢谢你更新这个,我一直在看我在spy上犯了什么错误,只要我切换到它工作的sinon语法。我没有意识到这个项目使用的是sinon。这段代码是否应该像普通jasmine语法一样使用sinon或不使用sinon?谢谢你更新这段代码,我一直在关注spy的错误,只要我切换到sinon语法,它就可以工作了。我没有意识到这个项目使用的是sinon。这段代码不应该像常规jasmine语法一样使用sinon还是不使用sinon?