我对AngularJS $资源服务应该被用于测试的方式感到困惑。 我发现了两种使用$ httpBackend服务的方法。 一种方法(取自Pluralsight教程):
describe('test', function() {
beforeEach(module('name'));
it('text', inject(function($httpBackend) {
$httpBackend.expectGET("/url");
// some code
$httpBackend.flush();
});
}
另一种方式(从this SO answer复制):
describe('test', function () {
var $httpBackend;
beforeEach(angular.mock.module('name'));
beforeEach(function () {
angular.mock.inject(function ($injector) {
$httpBackend = $injector.get('$httpBackend');
})
});
describe('text', function () {
it('text', inject(function (User) {
$httpBackend.expectGET('/url')
.respond([{
property: 'test'
}]);
// Some code
$httpBackend.flush();
}));
});
});
我不明白为什么第一种方式,直接使用模块,而第二种方式 angular.mock.module 。然后httpBackend服务注入的方式不同。第二种方式更加冗长。如果第一种方式有效,那么第二种方式的冗长是什么意思呢?
答案 0 :(得分:1)
没有正确的方法,这里应该记住几个不同的问题。
module
是angular.mock.module
的快捷方式。后者可用于避免与CommonJS模块发生冲突。
使用angular.mock.inject
的唯一原因与angular.mock.module
保持一致,可以始终安全地缩短为inject
。
beforeEach(inject(...))
。
beforeEach(function () { inject(...) })
是beforeEach(inject(...))
的详细版本。如果inject
块中除了beforeEach
之外应该有其他内容,请考虑将其拆分为多个beforeEach
块,以提高可读性。
$injector.get
只是冗长而且在风格或功能方面没有任何好处。如果服务是变量,它没有任何好处,但它提供了一种有用的模式,用于批量分配服务到this
规范上下文,而无需多次枚举它们:
beforeEach(inject(function ($injector) {
var self = this;
['$httpBackend', ...].forEach(function (depName) {
self[depName] = $injector.get(depName);
});
}));
it(function () {
var self = this;
self.$httpBackend...
});