在角度代码之外使用$ http时,$ http.get未定义

时间:2015-03-10 19:03:00

标签: angularjs jasmine karma-jasmine angularjs-controller angularjs-http

我正在针对角度控制器外部的方法运行茉莉花单元测试。

运行jasmine会抛出以下错误,

  

TypeError:无法在testMethod中读取未定义的属性'get'

任何人都可以帮我修复上述错误。谢谢!

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:我的实施基于这个stackoverflow答案。

2 个答案:

答案 0 :(得分:0)

尝试使用角度模拟的httpBackend服务来测试对服务器的ajax调用。

答案 1 :(得分:0)

尝试在testMethod函数中注入$ http ..就像这个testMethod($ http)。

另外,我认为你在这一行中有拼写错误:

<script src="specs/TestSpec.js.js"></script>

它应该是这样的:

<script src="specs/TestSpec.js"></script>