【问题标题】:$httpBackend mock not sending a request?$httpBackend 模拟不发送请求?
【发布时间】:2014-08-13 22:37:13
【问题描述】:

经过太多小时后,我终生无法让这个示例正常工作。我正在关注 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(因为没有发送任何内容)。我观察了网络请求,果然,即使我删除了模拟后端,也没有发送任何请求。

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

【问题讨论】:

    标签: javascript angularjs unit-testing httpbackend


    【解决方案1】:

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

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

    捂脸。

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

    【讨论】:

    • 呵呵.. 我当时想.. “wtf 正在这里发生吗?这真的应该工作.. 也许 $http.get 正在前置一个前导 / 或类似的”.. 我认为这种版本控制的东西在某个时候让我们所有人。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多