我有一个Angular JS应用程序,其中包含一个模块和一些服务。我的控制器使用这些服务。在Jasmine测试用例中,我使用Jasmine的createSpy
创建了一个服务模拟。以下是模拟服务:茉莉花的间谍投掷不是功能错误
beforeEach(module(function ($provide) {
shoppingData = function() {
getAllItems: jasmine.createSpy('getAllItems');
addAnItem: jasmine.createSpy('addAnItem');
removeItem: jasmine.createSpy('removeItem');
};
$provide.value('shoppingData', shoppingData);
}));
控制器在创建对象后立即调用getAllItems
函数。我创建了另一个创建控制器对象的beforeEach
块。以下是试块,以检查是否getAllItems
被称为:
it("Should call getAllItems function on creation of controller", function() {
expect(shoppingData.getAllItems).toHaveBeenCalled();
});
当我运行在浏览器中亚军规范网页,测试失败,以下错误:类型错误:“shoppingData.getAllItems”是不是一个函数
我看到了几个类似的例子,这种测试没有任何问题。任何人都可以指出什么是缺失或什么是错误的?
更新:我创建了一个plunker with the part that fails
我试过这个方法了。但它会抛出一个错误:'无法将shoppingData.getAllItems'转换为对象 –
也许您正在做其他事情。我做了一个[在这里工作的Plnker](http://plnkr.co/edit/Fj66l17cVtMe3XoxK8CS?p=preview)。看它。如果你什么都不懂,请告诉我,我会尽力解释。也许你忘了创建控制器,或者注入一些东西。只有当你第一次注入东西的时候,模块才会被创建,并且shoppingData可以被使用。 –
感谢您的努力。调整好你的plunker并分析我的代码后,我知道它失败了,因为我调用getAllItems的函数使用返回的对象来调用then()函数。我分叉你的plnk并创建了一个演示。你可以从这里访问它:http://plnkr.co/edit/BenU8lJtICS2uNyrtjns?p=preview –