当在 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>