在AngularJS/karma/jasmine测试中通过$http测试后端API?

在AngularJS/karma/jasmine测试中通过$http测试后端API?,angularjs,jasmine,karma-runner,httpbackend,angularjs-http,Angularjs,Jasmine,Karma Runner,Httpbackend,Angularjs Http,如何使用AngularJS/karma/jasmine测试测试我的API后端 我已尝试创建显示错误的最小测试用例: echo_server.py 来自瓶子导入响应、路由、运行 @路由(“/echo/”) def echo_echo(echo): response.headers['Access-Control-Allow-Origin']='*' 返回{'echo':echo}#用作JSON 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 运行() 测试

如何使用AngularJS/karma/jasmine测试测试我的API后端

我已尝试创建显示错误的最小测试用例:

echo_server.py
来自瓶子导入响应、路由、运行
@路由(“/echo/”)
def echo_echo(echo):
response.headers['Access-Control-Allow-Origin']='*'
返回{'echo':echo}#用作JSON
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
运行()
测试/单元/apiSpec.js
karma start configs/karma.conf.js的输出
INFO[karma]:karma v0.10.8服务器于启动http://localhost:9876/
信息[launcher]:启动浏览器PhantomJS
信息[PhantomJS 1.9.2(Linux)]:连接在插槽m7imfgmhXdOY9JVKJh8r上
日志:“ret=未定义”
PhantomJS 1.9.2(Linux)echo应该从服务器进行echo失败
错误:意外请求:获取http://localhost:8080/echo/foo
不需要更多的请求
$httpBackend(~Projects/~karmatests/test/lib/angular/angular mocks.js:1178)
...

上述测试堆栈不打算以这种方式使用。由于在原始
$httpBackend
的基础上修饰了
$httpBackend
,因此请求从未被调度

要允许请求通过,您需要排除
angular mocks.js
,或者指定某些URL应该像这样通过:

angular.module('yourModule').run(function ($httpBackend) {
    $httpBackend.whenGET(/.*/).passThrough();
}
阅读
$httpMockBackend


此外,您的测试是同步的,而服务器响应是异步的,因此它不会按预期工作。

为什么要使用angularJS和karma来测试后端。AngularJS和Karma都是关于前端的。向服务器发送HTTP请求不需要浏览器。角度模拟是用来模拟后端的,所以你不能用它来测试你真正的后端;我可以部署到staging。即:在所有开发过程中保持测试服务器运行。我的后端使用Java编写单元测试和集成测试,使用带有Karma的JavaScript编写单元测试,使用带有角度量角器的JavaScript编写e2e测试,并且我可以使用单个命令构建和测试所有内容(使用gradle)。我的CI服务器也会在每次推送时执行此操作。为正确的工作使用正确的工具不应该阻止uoi运行所有测试,并且只在所有测试都通过的情况下部署。当然,但是如果我只做一般的RESTful测试,JavaScript应该可以……我不是说不使用JavaScript。然而,业力和角度嘲弄是不合适的。我很确定NodeJS生态系统中存在测试RESTful后端的东西,但我对它的了解还不足以提出建议。但是
$httpBackend.whenGET(/.*/)
没有
.passThrough()
方法$httpBackend可以通过
ngMock
ngMockE2E
使用,但其行为不同。ngMockE2E具有.passThrough()。你可以看一看
angular.module('yourModule').run(function ($httpBackend) {
    $httpBackend.whenGET(/.*/).passThrough();
}