templateUrl
定義されているAngularJSディレクティブがあります。私はそれをジャスミンでユニットテストしようとしています。
私のJasmine JavaScriptは、この推奨に従って、次のようになります。
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');
});
});
});
});
Jasmine specエラーでこれを実行すると、次のエラーが発生します。
TypeError: Object #<Object> has no method 'passThrough'
必要なのは、templateUrlをそのままロードすることだけrespond
です。使用したくありません。これは、ngMockE2Eの代わりにngMockを使用することに関連している可能性があると思います。これが原因である場合、前者の代わりに後者をどのように使用しますか?
前もって感謝します!
expectGet
です。リクエストが試行されたかどうかを確認するだけです。
$httpBackend
モックにディレクティブの下で提供されたURLを実際に使用してtemplateUrl
それを取得するように伝える方法が必要です。passThrough
これをやろうと思った。これを行う別の方法を知っていますか?
.passThrough();
そのように使用していませんが、ドキュメントから、次のようなことを試しましたか$httpBackend.expectGET('path/to/template.html'); // do action here $httpBackend.flush();
?これはあなたの使用法に適していると思います-要求をキャッチしたくない、つまりwhenGet()
、それが送信されていることを確認してから、実際にそれを送る?