如何在控制器单元测试中进行 REST API 调用?
How to make a REST API call in a controller Unit test?
我正在尝试进行真正的调用并分配测试范围
使用 passThrough 方法但抛出错误
代码如下:-
describe('Controller: MainCtrl', function () {
// load the controller's module
beforeEach(module('w00App'));
var scope, MainCtrl, $httpBackend;
// Initialize the controller and a mock scope
beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
$httpBackend = _$httpBackend_;
$httpBackend.expectGET('http://api.some.com/testdata').passThrough();
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
});
})); it('should make a post to refresh the friends list and return matching users', function(){
var deferredResponse = $httpBackend.expectGET('http://api.some.com/testdata').passThrough();
console.log('response'+JSON.stringidy(deferredResponse));
$httpBackend.flush();
// expect(deferredResponse).toEqual(deferredResponse);
}); });
Error :- TypeError: 'undefined' is not a function (near '...
').passThrough();...') .....
如何像在真实控制器中那样调用和分配作用域?请帮助..它让我的生活变得轻松。
当测试一个真正的控制器并且在控制器内部对支持的进行一些 REST 调用时,最好模拟那些响应调用,通过 $httpBackend
对象拦截调用。
jasmine.getJSONFixtures().fixturesPath = 'base/test/unit/authz/api_mock/';
$httpBackend.when('POST', CONFIG.get('MAIN_URL_FOR_REST_SERVICES') + 'actions/search').respond(function() {
return [200, window.getJSONFixture('actions.json')];
});
至少,这就是我测试控制器的方式。
如果你真的很想调用支持的使用:
$http.get(YOUR_URL).success(function(data) {
--- your test ---
});
别忘了在 beforeEach 方法中注入 http 服务:
beforeEach(inject(function(_$http_) {
$http = _$http_;
}));
我正在尝试进行真正的调用并分配测试范围 使用 passThrough 方法但抛出错误
代码如下:-
describe('Controller: MainCtrl', function () {
// load the controller's module
beforeEach(module('w00App'));
var scope, MainCtrl, $httpBackend;
// Initialize the controller and a mock scope
beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
$httpBackend = _$httpBackend_;
$httpBackend.expectGET('http://api.some.com/testdata').passThrough();
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
});
})); it('should make a post to refresh the friends list and return matching users', function(){
var deferredResponse = $httpBackend.expectGET('http://api.some.com/testdata').passThrough();
console.log('response'+JSON.stringidy(deferredResponse));
$httpBackend.flush();
// expect(deferredResponse).toEqual(deferredResponse);
}); });
Error :- TypeError: 'undefined' is not a function (near '... ').passThrough();...') .....
如何像在真实控制器中那样调用和分配作用域?请帮助..它让我的生活变得轻松。
当测试一个真正的控制器并且在控制器内部对支持的进行一些 REST 调用时,最好模拟那些响应调用,通过 $httpBackend
对象拦截调用。
jasmine.getJSONFixtures().fixturesPath = 'base/test/unit/authz/api_mock/';
$httpBackend.when('POST', CONFIG.get('MAIN_URL_FOR_REST_SERVICES') + 'actions/search').respond(function() {
return [200, window.getJSONFixture('actions.json')];
});
至少,这就是我测试控制器的方式。
如果你真的很想调用支持的使用:
$http.get(YOUR_URL).success(function(data) {
--- your test ---
});
别忘了在 beforeEach 方法中注入 http 服务:
beforeEach(inject(function(_$http_) {
$http = _$http_;
}));