在Jasmine测试期间插入(SpyOn 2次)jQuery值以输入
嗨我有工作测试
it("should add a model", function() { spyOn($.fn, "val").and.returnValue("Bar"); foodtype.addNewFoodtype(); //My view expect($("#newFoodtype").val()).toEqual("Bar"); expect(foodtype.collection.length).toEqual(1); });
我下次测试的时候
spyOn($.fn, "val").and.returnValue("Bar"); $("#newFoodtype").val() spyOn($.fn, "val").and.returnValue("Foo"); $("#newFoodtype").val()
检查更改但有错误
错误:spyOn:val已经被用于监视:spyOn(object,methodName)
- 你只需要返回一个新值而不是再次监视它。
- 以下是我修改代码以使其工作的方式。
- 为spy分配了一个变量,以便我可以再次访问它
spyObj.and.returnValue("Foo");
-
请注意,我使用了虚拟视图
foodtype
来模仿您的视图。var foodtype = { addNewFoodtype: function() { $("#newFoodtype").val("some val"); this.collection.push("some val"); }, collection: [] } describe("multispy demo", function() { it("should add a model", function() { var spyObj = spyOn($.fn, "val").and.returnValue("Bar"); foodtype.addNewFoodtype(); //My view expect($("#newFoodtype").val()).toEqual("Bar"); expect(foodtype.collection.length).toEqual(1); spyObj.and.returnValue("Foo"); expect($("#newFoodtype").val()).toEqual("Foo"); }); });