我想传递一些我的http请求,而不是在我的单元测试中模拟它们,但是当我尝试调用passThrough()方法时,会抛出缺少方法的错误:
“TypeError:Object#没有方法'passThrough'”。
有人知道我该如何解决它吗?
有我的代码:
'use strict';
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.json').passThrough();
scope = $rootScope.$new();
MainCtrl = $controller('MainCtrl', {
$scope: scope
});
}));
});
答案 0 :(得分:4)
如果您想在开发过程中模拟后端,只需在主html文件中安装angular-mocks
,将其作为依赖项添加到您的应用程序(angular.module('myApp', ['ngMockE2E']))
中,然后模拟您需要的请求。 / p>
例如;
angular.module('myApp')
.controller('MainCtrl', function ($scope, $httpBackend, $http) {
$httpBackend.whenGET('test').respond(200, {message: "Hello world"});
$http.get('test').then(function(response){
$scope.message = response.message //Hello world
})
});
要小心,添加ngMockE2E将要求您设置路由,以防通过AngularJS路由进行操作。
实施例
angular.module('myApp', ['ngMockE2E'])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.otherwise({
redirectTo: '/'
});
})
.run(function($httpBackend){
$httpBackend.whenGET('views/main.html').passThrough();
})