我有一个已templateUrl
定义的AngularJS指令。我正在尝试与Jasmine进行单元测试。
根据此建议,我的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
。我相信这可能与使用ngMock而不是ngMockE2E有关。如果这是罪魁祸首,如何使用后者而不是前者?
提前致谢!
expectGET
发送请求……至少是开箱即用的。在文档它们与例如/auth.py
有$httpBackend.when
前$httpBackend.expectGET
和$httpBackend.flush
调用。
expectGet
只是检查是否尝试了请求。
$httpBackend
模拟程序实际使用伪指令下提供的URL templateUrl
并获取它。我以为passThrough
会这样做。您知道其他方法吗?
.passThrough();
这种方式,但是从文档中,您是否尝试过类似的方法:$httpBackend.expectGET('path/to/template.html'); // do action here $httpBackend.flush();
我认为这更适合您的用法-您不想捕获请求,即whenGet()
,而是检查请求是否已发送,然后实际发送?