Tôi có một chỉ thị AngularJS đã templateUrl
được xác định. Tôi đang cố gắng kiểm tra đơn vị nó với Jasmine.
JavaScript Jasmine của tôi trông giống như sau, theo đề xuất của cái này :
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');
});
});
});
});
Khi tôi chạy điều này trong lỗi thông số kỹ thuật Jasmine của mình, tôi gặp lỗi sau:
TypeError: Object #<Object> has no method 'passThrough'
Tất cả những gì tôi muốn là để templateUrl được tải như cũ - tôi không muốn sử dụng respond
. Tôi tin rằng điều này có thể liên quan đến việc sử dụng ngMock thay vì ngMockE2E . Nếu đây là thủ phạm, làm cách nào để sử dụng cái sau thay vì cái trước?
Cảm ơn trước!
expectGet
chỉ là kiểm tra xem một yêu cầu đã được thử.
$httpBackend
mô phỏng thực sự sử dụng URL được cung cấp trong chỉ thị bên dưới templateUrl
và đi lấy nó. Tôi nghĩ passThrough
sẽ làm điều này. Bạn có biết một cách khác để làm điều này?
.passThrough();
theo cách đó, nhưng từ các tài liệu, bạn đã thử điều gì đó như:$httpBackend.expectGET('path/to/template.html'); // do action here $httpBackend.flush();
Tôi nghĩ điều này phù hợp với cách sử dụng của bạn hơn - bạn không muốn bắt yêu cầu, tức làwhenGet()
, thay vào đó hãy kiểm tra xem nó đã được gửi chưa, và sau đó thực sự gửi nó?