如何测试使用AngularFire的服务

时间:2015-03-08 13:34:31

标签: angularjs firebase mocha angularfire sinon

如何测试使用AngularFire的服务?

让我们考虑以下服务:

app.factory("SampleService", ["$firebaseObject", "FBURL", function($firebaseObject, FBURL) {
    var ref = new Firebase(FBURL);

    return {
        get: function(id) {     
            var sampleDataRef = ref.child(id || "new");

            return $firebaseObject(sampleDataRef).$loaded();
        }
    };
}]);

我创建了以下测试,该测试应该检查firebase网址是否正确创建并且返回的值是否为promise。更重要的是,此测试不应连接到真正的firebase服务器。遗憾的是,由于$httpBackend异常,它无法正常工作:错误:没有待处理的待处理请求!

describe("Service: SampleService", function() {
    var service,
        FBURL,
        $rootScope,
        $httpBackend;

    beforeEach(module("sampleApp"));

    beforeEach(module(function($provide){
        FBURL = "https://TEST_URL.firebaseio.com/";
        $provide.value("FBURL", FBURL);
    }));

    beforeEach(inject(function($injector, _$httpBackend_, _$rootScope_) {        
        $httpBackend = _$httpBackend_;
        $rootScope = _$rootScope_;

        service = $injector.get("SampleService");
    }));

    it("should get sample data by real id", function() {         
        var id = "SFO";
        var expectedResponse = {IATA: "TEST"};
        var actualResponse = null;

        $httpBackend.expectGET(FBURL + "/" + id).respond(expectedResponse);
        service.get(id).then(function(result) {
            actualResponse = result;          
        });
        $httpBackend.flush();

        expect(actualResponse).to.be.null;

        $rootScope.$apply();

        expect(actualResponse).to.be.eql(expectedResponse);
    });
});

我的问题是,应该如何测试使用AngularFire的服务?

  1. $httpBackend是否足以测试所描述的功能?我应该在此测试中修复什么才能使其按预期工作?
  2. 也许我应该创建一个存根并检查传递给它的参数,而不是使用$httpBackend。我尝试使用sinon.stub()方法,但我无法使其正常工作。
  3. 还有MockFirebase,但我没有找到如何将其与AngularFire和mocha一起使用的示例。
  4. 使用mocha,chai和sinon创建的完整示例可在jsFiddle上找到。

0 个答案:

没有答案