$ httpBackend模拟不发送请求?

时间:2014-08-13 22:37:13

标签: javascript angularjs unit-testing httpbackend

经过太多时间,我不能为我的生活得到这个例子。我跟随Ben Lesh的excellent guides在Angular中嘲笑$http个请求,但由于某种原因服务请求没有发送。

我已经通过构建单独的HTML DOM并将我的应用程序和一个微型控制器应用于它来验证服务是否正常工作。我正在使用Jasmine 1.3和Angular 1.2.9(当然还有angular-mocks.js)。

这是应用程序:

var app = angular.module('myApp', []);

app.factory('httpBasedService', function($http) {
    return {
        sendMessage: function(msg) {
            return $http.get('something.json?msg=' + msg)
                .then(function(result) {
                    console.log(result.data)
                    return result.data;
                });
        }
    };
});

测试:

describe("httpBasedService ", function () {
   var httpBasedService,
        mockBackend;

    beforeEach(function (){
        module('myApp');

        inject(function(_$httpBackend_, _httpBasedService_) {
            mockBackend = _$httpBackend_;
            httpBasedService = _httpBasedService_;
        });
    });

    afterEach(function() {
        mockBackend.verifyNoOutstandingExpectation();
        mockBackend.verifyNoOutstandingRequest();
    });

    it('should send the msg and return the response.', function () {
        var returnData = {excited: true};
        mockBackend.expectGET('something.json?msg=wee').respond(returnData);

        var returnedPromise = httpBasedService.sendMessage('wee');
        var result;

        returnedPromise.then(function(response) {
            result = response;
        });

        mockBackend.flush();
        expect(result).toEqual(returnData);
    });
});

我收到Error: No pending request to flush !,当然还有Error: Unsatisfied requests: GET(因为没有发送任何内容)。我观察网络​​请求,果然,即使我删除了模拟后端,也没有发送请求。

我已经注释掉了东西,重组了一些东西,尝试了很多其他的例子,但无济于事。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

像往常一样,当我talk to the duck时,问题就解决了。

原来我正在使用v1.1.0中的angular-mocks.js。我的angular.js版本是1.2.9。

捂脸。

检查您的版本,未来的读者,并节省几个小时。