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

前端之家收集整理的这篇文章主要介绍了在AngularJS / karma / jasmine测试中通过$http测试后端API?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何使用AngularJS / karma / jasmine测试测试我的API后端?

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

echo_server.py

  1. from bottle import response,route,run
  2.  
  3. @route('/echo/<echo>')
  4. def echo_echo(echo):
  5. response.headers['Access-Control-Allow-Origin'] = '*'
  6. return {'echo': echo} # Served as JSON
  7.  
  8. if __name__ == '__main__':
  9. run()

测试/单元/ apiSpec.js

  1. // Should this be in `test/e2e/apiSpec.js`?
  2. describe('echo',function () {
  3. var scope,http;
  4.  
  5. beforeEach(inject(function ($rootScope,$http) {
  6. $http.defaults.useXDomain = true; // CORS
  7. scope = $rootScope.$new();
  8. http = $http;
  9. }));
  10.  
  11.  
  12. it("should echo from server",function () {
  13. scope.$apply(function () {
  14. var ret;
  15. http.get("http://localhost:8080/echo/foo")
  16. .success(function (data,status,headers,config) {
  17. ret = data;
  18. })
  19. .error(function (data,config) {
  20. ret = data;
  21. });
  22. console.log('ret = ' + ret);
  23. expect(ret.echo).toBe("foo");
  24. });
  25. });
  26. });

业力的输出开始配置/ karma.conf.js

  1. INFO [karma]: Karma v0.10.8 server started at http://localhost:9876/
  2. INFO [launcher]: Starting browser PhantomJS
  3. INFO [PhantomJS 1.9.2 (Linux)]: Connected on socket m7imfgmhXdOY9JVKJh8r
  4. LOG: 'ret = undefined'
  5. PhantomJS 1.9.2 (Linux) echo should echo from server Failed
  6. Error: Unexpected request: GET http://localhost:8080/echo/foo
  7. No more request expected
  8. at $httpBackend (~Projects/~karma-tests/test/lib/angular/angular-mocks.js:1178)
  9. ...
提到的测试堆栈不打算以这种方式使用.由于$httpMockBackend已在原始$httpBackend顶部装饰,因此永远不会调度该请求.

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

  1. angular.module('yourModule').run(function ($httpBackend) {
  2. $httpBackend.whenGET(/.*/).passThrough();
  3. }

阅读$httpMockBackend here的文档

此外,您的测试是同步的,并且服务器响应是异步的,因此它将无法按预期工作.

猜你在找的Angularjs相关文章