Ho una direttiva AngularJS che ha un file templateUrl
. Sto provando a testarlo con Jasmine.
Il mio JavaScript Jasmine è simile al seguente, secondo la raccomandazione di questo :
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');
});
});
});
});
Quando lo eseguo nel mio errore di specifica Jasmine ottengo il seguente errore:
TypeError: Object #<Object> has no method 'passThrough'
Tutto quello che voglio è che templateUrl venga caricato così com'è, non voglio usare respond
. Credo che questo possa essere correlato ad esso utilizzando ngMock invece di ngMockE2E . Se questo è il colpevole, come posso utilizzare quest'ultimo al posto del primo?
Grazie in anticipo!
expectGET
invii richieste ... almeno fuori dagli schemi. Nei documenti il loro esempio con /auth.py
ha una $httpBackend.when
prima di $httpBackend.expectGET
e $httpBackend.flush
chiama.
expectGet
sta solo controllando se è stata tentata una richiesta.
$httpBackend
mock di utilizzare effettivamente l'URL fornito nella direttiva sotto templateUrl
e andare a prenderlo. Ho pensato di passThrough
farlo. Conosci un modo diverso per farlo?
.passThrough();
in questo modo, ma dai documenti, hai provato qualcosa del tipo:$httpBackend.expectGET('path/to/template.html'); // do action here $httpBackend.flush();
Penso che questo si adatti meglio al tuo utilizzo - non vuoi catturare la richiesta, cioèwhenGet()
, ma invece controllare che sia inviata, e poi effettivamente invialo?