我正在尝试测试一个依赖于我自己构建的服务的控制器。我想模拟这个服务,因为该服务与 DOM 对话。
这是我目前的测试:
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 用于....