我想測試一個控制器,這取決於我自己建立的服務。我想嘲笑這項服務,因爲服務與DOM對話。注入一個angularjs控制器測試的模擬服務
這是我目前的測試:
describe('Player Controllers', function() {
beforeEach(function() {
this.addMatchers({
toEqualData: function (expected) {
return angular.equals(this.actual, expected);
}
});
});
describe('TestPSPlayerModule', function() {
var $httpBackend, scope, ctrl;
beforeEach(module('PSPlayerModule'));
beforeEach(inject(function (_$httpBackend_, $rootScope, $controller) {
$httpBackend = _$httpBackend_;
scope = $rootScope.$new();
ctrl = $controller(PlayerController, { $scope: scope });
}));
it('should request a clip url from the server when clipClicked is called', function() {
expect(1).toBe(1);
});
});
});
我的控制器看起來是這樣的:
w.PlayerController = function ($scope, $http, $window, speedSlider, $location) {
...
}
所以這是我想嘲笑speedSlider。
我有主意,用一個模塊我在測試代碼創建了一個可以提供僞造的實施速度滑塊,所以我增加了以下的test.js文件的頂部:
module('TestPSPlayerModule', []).factory('speedSlider', function() {
return = {
...
};
});
,然後列出在beforeEach該模塊()調用,而不是具體的一個,但如果我這樣做,我得到以下錯誤:
Injector already created, can not register a module!
所以我想一定有給我提供了一個更好的辦法模擬執行我的一項服務。我可以使用sinon.js作爲...
你見過這個文檔嗎? http://docs.angularjs.org/guide/dev_guide.services.testing_services其中'$ window'被嘲笑。這是一個相當簡單的例子,但它可能爲您想要做的事提供模板。 – 2012-07-12 22:31:05
@NoahFreitas你提供的鏈接現在已經死亡 – Stephane 2015-04-11 14:35:53
@StephaneEybert,看起來它已被移動並更新到這裏:https://docs.angularjs.org/guide/services#unit-testing – 2015-04-11 18:01:14