Eu tenho uma diretiva AngularJS que tem um templateUrl
definido. Estou tentando testá-lo com Jasmine.
Meu Jasmine JavaScript parece com o seguinte, por recomendação do presente :
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 executo isso no meu erro de especificação do Jasmine, recebo o seguinte erro:
TypeError: Object #<Object> has no method 'passThrough'
Tudo o que eu quero é que o templateUrl seja carregado como está - eu não quero usar respond
. Eu acredito que isso pode estar relacionado a ele usando ngMock em vez de ngMockE2E . Se esse é o culpado, como eu uso o último em vez do primeiro?
Desde já, obrigado!
expectGET
envia pedidos ... pelo menos fora da caixa. Nos documentos, o exemplo deles /auth.py
tem um $httpBackend.when
antes das chamadas $httpBackend.expectGET
e $httpBackend.flush
.
expectGet
é apenas verificar se uma solicitação foi tentada.
$httpBackend
mock para realmente usar a URL fornecida na diretiva templateUrl
e ir buscá-la. Eu pensei passThrough
que faria isso. Você conhece uma maneira diferente de fazer isso?
.passThrough();
dessa maneira, mas com base nos documentos, você tentou algo como:$httpBackend.expectGET('path/to/template.html'); // do action here $httpBackend.flush();
Eu acho que isso se encaixa melhor no seu uso - você não deseja capturar a solicitação, ou sejawhenGet()
, mas verifique se ela é enviada e, na verdade, Envie isto?