当在 angular 代码之外使用 $http 时,$http.get 未定义
$http.get is undefined when $http is used outside angular code
我正在 运行 茉莉花单元测试针对 angular 控制器之外的方法。
运行茉莉花抛出以下错误,
TypeError: Cannot read property 'get' of undefined at testMethod
谁能帮我解决上面的错误。谢谢!
Test.js
function testMethod() {
var $http = angular.element('html').injector().get('$http');
$http.get('/testAPI/testCall').success(...);
}
TestSpec.js
it('makes a successful Test call', angular.mock.inject(function ($http, $window) {
testMethod();
}));
JasmineSpecRunner.html
<html>
<head>
<meta charset="utf-8">
<link rel="shortcut icon" type="image/png" href="lib/jasmine_favicon.png">
<link rel="stylesheet" href="lib/jasmine.css">
<script src="lib/jquery-2.1.3.js"></script>
<script src="lib/jasmine.js"></script>
<script src="lib/jasmine-html.js"></script>
<script src="lib/boot.js"></script>
<script src="lib/angular.js"></script>
<script src="lib/angular-mocks.js"></script>
<!-- include source files here-->
<script src="src/Test.js"></script>
<!-- include spec files here-->
<script src="specs/TestSpec.js.js"></script>
</head>
<body>
<div ng-app="SpecRunner" ng-controller="SpecController"></div>
</body>
</html>
PS:我的实现是基于这个Whosebug答案。
尝试使用 angular 模拟的 httpBackend 服务来测试对服务器的 ajax 调用。
尝试在 testMethod 函数中注入 $http.. 就像这样 testMethod($http).
此外,我认为您在这一行中有拼写错误:
<script src="specs/TestSpec.js.js"></script>
应该是这样的:
<script src="specs/TestSpec.js"></script>
我正在 运行 茉莉花单元测试针对 angular 控制器之外的方法。
运行茉莉花抛出以下错误,
TypeError: Cannot read property 'get' of undefined at testMethod
谁能帮我解决上面的错误。谢谢!
Test.js
function testMethod() {
var $http = angular.element('html').injector().get('$http');
$http.get('/testAPI/testCall').success(...);
}
TestSpec.js
it('makes a successful Test call', angular.mock.inject(function ($http, $window) {
testMethod();
}));
JasmineSpecRunner.html
<html>
<head>
<meta charset="utf-8">
<link rel="shortcut icon" type="image/png" href="lib/jasmine_favicon.png">
<link rel="stylesheet" href="lib/jasmine.css">
<script src="lib/jquery-2.1.3.js"></script>
<script src="lib/jasmine.js"></script>
<script src="lib/jasmine-html.js"></script>
<script src="lib/boot.js"></script>
<script src="lib/angular.js"></script>
<script src="lib/angular-mocks.js"></script>
<!-- include source files here-->
<script src="src/Test.js"></script>
<!-- include spec files here-->
<script src="specs/TestSpec.js.js"></script>
</head>
<body>
<div ng-app="SpecRunner" ng-controller="SpecController"></div>
</body>
</html>
PS:我的实现是基于这个Whosebug答案。
尝试使用 angular 模拟的 httpBackend 服务来测试对服务器的 ajax 调用。
尝试在 testMethod 函数中注入 $http.. 就像这样 testMethod($http).
此外,我认为您在这一行中有拼写错误:
<script src="specs/TestSpec.js.js"></script>
应该是这样的:
<script src="specs/TestSpec.js"></script>