如何测试使用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的服务?
$httpBackend
是否足以测试所描述的功能?我应该在此测试中修复什么才能使其按预期工作?$httpBackend
。我尝试使用sinon.stub()
方法,但我无法使其正常工作。使用mocha,chai和sinon创建的完整示例可在jsFiddle上找到。