如何使用AngularJS / karma / jasmine测试测试我的API后端?
echo_server.py
- from bottle import response,route,run
- @route('/echo/<echo>')
- def echo_echo(echo):
- response.headers['Access-Control-Allow-Origin'] = '*'
- return {'echo': echo} # Served as JSON
- if __name__ == '__main__':
- run()
测试/单元/ apiSpec.js
- // Should this be in `test/e2e/apiSpec.js`?
- describe('echo',function () {
- var scope,http;
- beforeEach(inject(function ($rootScope,$http) {
- $http.defaults.useXDomain = true; // CORS
- scope = $rootScope.$new();
- http = $http;
- }));
- it("should echo from server",function () {
- scope.$apply(function () {
- var ret;
- http.get("http://localhost:8080/echo/foo")
- .success(function (data,status,headers,config) {
- ret = data;
- })
- .error(function (data,config) {
- ret = data;
- });
- console.log('ret = ' + ret);
- expect(ret.echo).toBe("foo");
- });
- });
- });
业力的输出开始配置/ karma.conf.js
- INFO [karma]: Karma v0.10.8 server started at http://localhost:9876/
- INFO [launcher]: Starting browser PhantomJS
- INFO [PhantomJS 1.9.2 (Linux)]: Connected on socket m7imfgmhXdOY9JVKJh8r
- LOG: 'ret = undefined'
- PhantomJS 1.9.2 (Linux) echo should echo from server Failed
- Error: Unexpected request: GET http://localhost:8080/echo/foo
- No more request expected
- at $httpBackend (~Projects/~karma-tests/test/lib/angular/angular-mocks.js:1178)
- ...
提到的测试堆栈不打算以这种方式使用.由于$httpMockBackend已在原始$httpBackend顶部装饰,因此永远不会调度该请求.
要允许请求通过,您需要排除angular-mocks.js,或者指定一些URL应该像这样通过:
- angular.module('yourModule').run(function ($httpBackend) {
- $httpBackend.whenGET(/.*/).passThrough();
- }
阅读$httpMockBackend here的文档
此外,您的测试是同步的,并且服务器响应是异步的,因此它将无法按预期工作.