错误:意外请求:POST Karma-jasmine-angular

时间:2015-04-29 07:39:11

标签: angularjs unit-testing jasmine webstorm karma-jasmine

实际情况就像当我试图一起测试我的角度js控制器和服务时,首先我称之为获取 ajax请求,并且在成功时我调用了一个也包含一个用户服务的用户服务发布 ajax请求。当我运行测试时,我收到以下错误。

  

错误:意外请求:POST http://localhost:8080/services/access     没有更多的要求   /home/test/WebstormProjects/test2/bower_components/angular-mocks/angular-mocks.js

我在堆栈溢出中发现了一些类似的问题,但它不适合我的场景。以下是我发现的问题。

  

Unexpected request: GET No more request expected at $httpBackend

     

Mocking $httpBackend - how to handle "Unexpected request, No more request expected"?

     

AngularJS $httpBackend - "No more request expected" error

这是我的代码,我做了并尝试。

  

test.js

app.controller('LoginController', function LoginController($scope,$http,userService) {
  $scope.test="hello";
  $scope.authenticateUser = function(){
    var username = 'test';
    var password = '123456';
    var token = "";

    $http.get('http://localhost:8080/services/request').success(function(data) {
        $scope.result = data.status;
        userService.authenticateUser(username, password, "").then(function(response){});
    });
  };
});
  

app.js

userService.authenticateUser = function(username, password,requestToken){

            var status = $http({
                method: 'POST',
                url: "http://localhost:8080/services/access",
                data: $.param({username:username,password:password,request_token:requestToken}),
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}

            }).success(function(data, status, headers, config) {
                return data;

            }).
              error(function(data, status, headers, config) {
                return null;
            });
            return status;
        };

        return userService;
  

userService.js

{{1}}

我是karma-jasmine-angular测试的新手,我正在努力应对这种情况。请为我提供适当的指导,以解决这种测试情况。任何帮助将不胜感激。如果可能的话,请向我推荐一些好的演示来测试服务成功的服务。提前致谢。

1 个答案:

答案 0 :(得分:5)

POST请求http://localhost:8080/services/access时,您忘记假冒后端回复。在测试中,您只测试预期的POST请求是否已生成或params正确。只需添加假响应即可完美运行

httpBackend
    .when('POST', 'http://localhost:8080/services/access')
    .respond(200, {
        status: "success"
});

Link fiddle表示您的偏好。