Kendim oluşturduğum bir hizmete bağlı bir denetleyiciyi test etmeye çalışıyorum. Hizmet, DOM ile görüştüğü için bu hizmetle dalga geçmek isterim.Bir angularjs denetleyici sınaması için bir sahte hizmet enjekte etme
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);
});
});
});
Benim denetleyicisi şuna benzer::
İşte benim şimdiki testi var
w.PlayerController = function ($scope, $http, $window, speedSlider, $location) {
...
}
yüzden ben taklit istiyor speedSlider bu.
Hız kaydırıcı bir sahte uygulama sağlayabilir ben benim test kodda oluşturulan bir modül kullanmak fikri vardı, bu yüzden test.js dosyanın üstüne aşağıdaki eklendi:
module('TestPSPlayerModule', []).factory('speedSlider', function() {
return = {
...
};
});
ve sonra yerine beton birinin diyoruz) beforeEach bu modül (listelemek ama aşağıdaki hatayı alıyorum bunu yaparsan:
Injector already created, can not register a module!
yüzden anlamaya bana temin etmek için daha iyi bir yolu olmalı hizmetlerimden birinin sahte uygulaması. Belki bir şey için sinon.js'yi kullanabilirim ....
Bu belgeyi gördünüz mü? http://docs.angularjs.org/guide/dev_guide.services.testing_services '$ window' alay edildi. Bu oldukça basit bir örnektir, ancak yapmak istediğiniz şey için bir şablon sağlayabilir. –
@NoahFreitas Sağladığınız bağlantı artık öldü – Stephane
@StephaneEybert, şuraya taşındı ve burada güncellendi: https://docs.angularjs.org/guide/services#unit-testing –