Saya memiliki arahan AngularJS yang memiliki templateUrl
definisi. Saya mencoba untuk mengujinya dengan Jasmine.
JavaScript Jasmine saya terlihat seperti berikut, sesuai rekomendasi ini :
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');
});
});
});
});
Ketika saya menjalankan ini dalam kesalahan spesifikasi Jasmine saya, saya mendapatkan kesalahan berikut:
TypeError: Object #<Object> has no method 'passThrough'
Yang saya inginkan adalah templateUrl dimuat apa adanya - saya tidak ingin menggunakan respond
. Saya yakin ini mungkin terkait dengan penggunaan ngMock daripada ngMockE2E . Jika ini pelakunya, bagaimana cara menggunakan yang terakhir daripada yang pertama?
Terima kasih sebelumnya!
expectGet
hanya memeriksa apakah suatu permintaan telah dicoba.
$httpBackend
tiruan untuk benar-benar menggunakan URL yang disediakan di arahan di bawah templateUrl
dan mendapatkannya. Saya pikir passThrough
akan melakukan ini. Apakah Anda mengetahui cara lain untuk melakukan ini?
.passThrough();
dengan cara itu, tetapi dari dokumen, apakah Anda sudah mencoba sesuatu seperti:$httpBackend.expectGET('path/to/template.html'); // do action here $httpBackend.flush();
Saya rasa ini lebih cocok dengan penggunaan Anda - Anda tidak ingin menangkap permintaan, yaituwhenGet()
, tetapi memeriksa apakah sudah terkirim, dan kemudian sebenarnya Kirimkan?