我有一个包装RESTful API的资源。我使用来自我的控制器的资源来创建新对象并保存它们,类似于Angular文档中的这个片段:
var newCard = new CreditCard({number:'0123'});
newCard.name = "Mike Smith";
newCard.$save();
在Jasmine中编写单元测试时,执行$ save调用时出现以下错误:"无法读取属性' $ promise'未定义"。
在我的控制器中测试包含上述代码的方法的最佳方法是什么?
答案 0 :(得分:2)
如果您使用Jasmine的spyOn()
函数来验证是否调用了$resource
方法,它会覆盖原始的$resource
方法,并使用实现"间谍& #34;功能。
如果应用程序中的代码依赖于$resource
设置$ promise属性,或者它依赖于$resource
中返回的对象/数组,则Jasmine的间谍功能赢了&# 39; t返回任何内容或在$ promise属性上设置一个值。因此,应用程序中完美的代码将在测试时失败。将$http
与then()
,success()
或error()
函数一起使用时会发生类似情况。
要解决这个问题,你可以让Jasmine监视这个函数,并通过这样的方式调用原始函数:
// Newer Jasmine 2.0 syntax:
spyOn(resource, "$save").and.callThrough();
// Older syntax:
spyOn(resource, "$save").andCallThrough();