Kev*_*edy 65 unit-testing jasmine angularjs
比方说,我有一个服务shop依赖于两个状态的服务schedule和warehouse.如何注入不同的版本schedule,并warehose为shop单元测试?
这是我的服务:
angular.module('myModule').service('shop', function(schedule, warehouse) {
return {
canSellSweets : function(numRequiredSweets){
return schedule.isShopOpen()
&& (warehouse.numAvailableSweets() > numRequiredSweets);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的嘲笑:
var mockSchedule = {
isShopOpen : function() {return true}
}
var mockWarehouse = {
numAvailableSweets: function(){return 10};
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
expect(shop.canSellSweets(5)).toBe(true);
expect(shop.canSellSweets(20)).toBe(false);
Run Code Online (Sandbox Code Playgroud)
小智 53
beforeEach(function () {
module(function ($provide) {
$provide.value('schedule', mockSchedule);
});
});
Run Code Online (Sandbox Code Playgroud)
模块是角度模拟模块提供的功能.如果传入字符串参数,则会加载具有相应名称的模块,并且所有提供程序,控制器,服务等都可用于规范.通常使用注入功能加载它们.如果传入回调函数,将使用Angular的$ injector服务调用它.然后,该服务查看传递给回调函数的参数,并尝试推断应将哪些依赖项传递给回调.
Mat*_*rds 37
改进Atilla的答案并直接回答KevSheedy的评论,在module('myApplicationModule')你的背景下你会做到以下几点:
beforeEach(module('myApplicationModule', function ($provide) {
$provide.value('schedule', mockSchedule);
}));
Run Code Online (Sandbox Code Playgroud)
使用CoffeeScript我在一些问题上运行所以我最后使用null:
beforeEach ->
module ($provide) ->
$provide.value 'someService',
mockyStuff:
value : 'AWESOME'
null
Run Code Online (Sandbox Code Playgroud)
你可以在这里查看更多信息
https://docs.angularjs.org/guide/services#unit-testing
您想使用$ offer服务.在你的情况下
$provide.value('schedule', mockSchedule);
Run Code Online (Sandbox Code Playgroud)