Insertar (SpyOn 2 veces) el valor jQuery para ingresar durante las pruebas de Jasmine

Hola tengo unas pruebas de trabajos

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

en la siguiente prueba cuando establezca

 spyOn($.fn, "val").and.returnValue("Bar"); $("#newFoodtype").val() spyOn($.fn, "val").and.returnValue("Foo"); $("#newFoodtype").val() 

para comprobar un cambio pero tener un error

Error: spyOn: val ya se ha espiado Uso: spyOn (object, methodName)

  • Solo tendrás que devolver un nuevo valor en lugar de espiarlo de nuevo.
  • Aquí es cómo modifiqué tu código para que funcione.
  • asigné una variable para espiar para que pueda acceder a ella una vez más spyObj.and.returnValue("Foo");
  • Tenga en cuenta que he usado un tipo de foodtype vista foodtype que imita su vista.

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