我正在尝试进行真正的调用和分配范围以进行测试 使用 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);
}); });
错误: - TypeError:'undefined'不是函数(靠近'... ')。passThrough(); ...').....
如何在真实控制器中调用和分配范围?请帮助..它让我的生活变得轻松。
答案 0 :(得分:1)
当测试一个真实的控制器并在控制器内部对后台进行一些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_;
}));