AngularJS - 在指定的超时时间内未调用HTTP POST异步回调

时间:2016-01-08 16:13:44

标签: javascript angularjs unit-testing jasmine

我正在尝试使用JasmineKarma测试中执行简单的HTTP发布。我有代码并且它有效,因为我使用了Chrome应用Postman并成功检索了用户凭据。

所以一定是我的unit test。我做错了什么?

signInSpec.js

describe('Service: AuthFactory',function(){

    beforeEach(function () {
        module('ui.router');
        module('users');
    });

    var AuthFactory, httpBackend;

    beforeEach(function($httpBackend, _AuthFactory_) {
        httpBackend = $httpBackend;
        AuthFactory = _AuthFactory_;
    });

    it('should return POST', function(done) {
        AuthFactory.signIn({inputType: {user: "admin"}, credInput: {password: "pass123"}});

    httpBackend.when('POST','http://localhost:3000/api/AuthFactoryServ/signIn')
        .respond (200, {});

    httpBackend.flush(); // to return the response
    }, 20000);

});

AuthFactory.js

angular.module('users').factory('AuthFactory', ['$http', function($http) {

    var AuthFactory = {};

    AuthFactory.signIn = function(data) {
        return $http.post('http://localhost:3000/api/AuthFactoryServ/signIn', data);
    };

    AuthFactory.signOut = function(data) {
        return $http.post('http://localhost:3000/api/AuthFactoryServ/signOut', data);
    };

    return AuthFactory;

}]);

错误:

PhantomJS 1.9.8 (Windows 7 0.0.0) Service: Authentication should return POST F
AILED
        Error: Timeout - Async callback was not invoked within timeout specifi
ed by jasmine.DEFAULT_TIMEOUT_INTERVAL.
        TypeError: 'undefined' is not an object (evaluating 'AuthFactory.signIn')
            at C:/maink/client/tests/signInSpec.js:1

1 个答案:

答案 0 :(得分:1)

您需要模拟实际的ajax调用,以便它会调用您的假

it('should return POST', function(done) {
     // dont worry about calls to assets
     httpBackend.when ('POST','http://localhost:3000/api/AuthFactoryServ/signIn')
              .respond (200, {});

    AuthFactory.signIn({inputType: {user: "admin"}, credInput: {password: "pass123"}});
    httpBackend.flush(); // to return the response