在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"); }); });