【发布时间】:2016-12-31 13:10:36
【问题描述】:
我对 AngularJS $resource 服务应该被模拟以进行测试的方式感到困惑。 我找到了两种使用 $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();
}));
});
});
我不明白为什么第一种方式直接使用module,而第二种方式使用angular.mock.module。然后注入 httpBackend 服务的方式就不同了。第二种方式要冗长得多。如果第一种方法有效,那么第二种方法的冗长又有什么意义呢?
【问题讨论】:
-
module是angular.mock.module的快捷方式。后者可用于避免与 CommonJS 模块发生冲突。如果应该在多个规范中使用相同的服务,则使用beforeEach。 -
谢谢。但是对于 beforeEach,我理解,但我不明白为什么在第一种情况下使用 inject(function($httpBackend) 就足够了,而在第二种情况下, angular.mock.inject(function ($injector) 被使用。
标签: angularjs unit-testing mocking