0

经过太多小时后,我终生无法让这个示例正常工作。我正在按照 Ben Lesh 的优秀指南在 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(因为什么都没有发送)。我观察了网络请求,果然,即使我删除了模拟后端,也没有发送任何请求。

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

4

1 回答 1

1

像往常一样,当我和鸭子说话时,问题就解决了。

原来我是angular-mocks.js从 v1.1.0 开始使用的。我的angular.js版本是 1.2.9。

掌心。

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

于 2014-08-13T22:49:52.870 回答