我正在使用Angular和Angular UI的路由器。作为路由器配置的一部分,我有resolve
运行一些API调用:
$stateProvider.state('someState', {
templateUrl: '...',
resolve: {
auth: someFunction
},
controller: 'SomeStateCtrl'
});
someFunction()
会进行API调用:GET /someAPICall
。
现在,我说我正在为一些与此状态完全无关的服务编写测试someFunction()
或GET /someAPICall
:
angular.module('app').service('SomeSvc', function () {
this.something = function () {
return $http.get('/someOtherCall');
};
});
describe('SomeSvc Test', function () {
var SomeSvc, $httpBackend;
beforeEach(module('app'));
beforeEach(inject(function (_SomeSvc_, _$httpBackend_) {
SomeSvc = _SomeSvc_;
$httpBackend = _$httpBackend_;
}));
it('test', function () {
$httpBackend.whenGET('/someOtherCall').respond({
example: 'text'
});
SomeSvc.something().then(function (data) {
expect(data.example).toBe('text');
});
$httpBackend.flush();
});
});
如上所示,SomeSvc
拨打/someOtherCall
,但不是/someAPICall
。但是当我去运行此单元测试时,$httpBackend.flush()
最终会尝试处理从路由器生成的/someAPICall
:
Error: Unexpected request: GET /someAPICall
当然,我可以通过在我的测试中提供额外的.whenGET
来处理/someAPICall
来轻松解决此问题,但这不会扩展。我最初的想法是创建一些处理所有这些路由器API调用的全局测试服务(除了我的简化示例),所以我不需要在任何测试中重新定义它们。但是,鉴于我似乎无法找到关于此事的任何信息,我觉得我正在做的事情是缺少标记,我应该以不同的方式运行。
赞赏任何意见。