Mam dyrektywę AngularJS, która ma templateUrl
zdefiniowany plik . Próbuję przetestować to z Jasmine.
Moja Jasmine JavaScript wygląda jak poniżej, na zalecenie to :
describe('module: my.module', function () {
beforeEach(module('my.module'));
describe('my-directive directive', function () {
var scope, $compile;
beforeEach(inject(function (_$rootScope_, _$compile_, $injector) {
scope = _$rootScope_;
$compile = _$compile_;
$httpBackend = $injector.get('$httpBackend');
$httpBackend.whenGET('path/to/template.html').passThrough();
}));
describe('test', function () {
var element;
beforeEach(function () {
element = $compile(
'<my-directive></my-directive>')(scope);
angular.element(document.body).append(element);
});
afterEach(function () {
element.remove();
});
it('test', function () {
expect(element.html()).toBe('asdf');
});
});
});
});
Kiedy uruchamiam to w moim błędzie specyfikacji Jasmine, pojawia się następujący błąd:
TypeError: Object #<Object> has no method 'passThrough'
Wszystko, czego chcę, to załadowanie templateUrl bez zmian - nie chcę go używać respond
. Myślę, że może to być związane z używaniem ngMock zamiast ngMockE2E . Jeśli to jest winowajca, jak mam użyć tego drugiego zamiast pierwszego?
Z góry dziękuję!
expectGET
wysyłało to prośby ... przynajmniej po wyjęciu z pudełka. W dokumentach ich przykład /auth.py
ma $httpBackend.when
przed $httpBackend.expectGET
i $httpBackend.flush
wywołuje.
expectGet
wystarczy sprawdzić, czy próbowano wykonać żądanie.
$httpBackend
makiecie, aby faktycznie używał adresu URL podanego w dyrektywie templateUrl
i pobierał go. Myślałem, że passThrough
to zrobię. Czy znasz inny sposób, aby to zrobić?
.passThrough();
tego w ten sposób, ale z dokumentacji, czy próbowałeś czegoś takiego:$httpBackend.expectGET('path/to/template.html'); // do action here $httpBackend.flush();
Myślę, że to lepiej pasuje do twojego użycia - nie chcesz przechwytywać żądania, tj.whenGet()
, Ale zamiast tego sprawdź, czy zostało wysłane, a następnie faktycznie Wyślij to?