Angularjs 解决工厂功能内部的承诺
好吧,我真的在谷歌上搜索了很多来了解这个问题。但我在谷歌或StackOverflow上找到的每一个可能的解决方案都不能真正解决我的问题 我的工厂Angularjs 解决工厂功能内部的承诺,angularjs,unit-testing,firebase,jasmine,Angularjs,Unit Testing,Firebase,Jasmine,好吧,我真的在谷歌上搜索了很多来了解这个问题。但我在谷歌或StackOverflow上找到的每一个可能的解决方案都不能真正解决我的问题 我的工厂 我的工厂有一个功能(find),它使用一个服务从数据库(在我的例子中是Firebase)检索数据。成功获取数据后,将检索到的数据分配给变量 问题 在我的测试套件中调用find时,包含检索到的数据的变量仍然为null。所以我想这个承诺还没有解决。我不知道如何才能做到这一点 我的代码 resource/user.js .factory('User', ['
我的工厂有一个功能(
find
),它使用一个服务从数据库(在我的例子中是Firebase)检索数据。成功获取数据后,将检索到的数据分配给变量
问题在我的测试套件中调用
find
时,包含检索到的数据的变量仍然为null。所以我想这个承诺还没有解决。我不知道如何才能做到这一点
我的代码resource/user.js
.factory('User', ['$firebaseRef','$firebaseObject', function UserFactory($firebaseRef,$firebaseObject) {
var ref = $firebaseRef.child('users');
var User = {
find:function(uid){
if(!uid)
return;
return $firebaseObject(ref.child(uid));
}
};
return User;
}]);
resource/test/user.spec.js
describe('resource.user', function() {
var User;
beforeEach(module('firebase'));
beforeEach(function() {
module('resource.user')
});
beforeEach(inject(function(_User_) {
User = _User_;
}));
it('should resolve the user data when a valid `id` has been given', function() {
User.find('some-uuid').then(function(data){
console.log(data);
expect(data).not.toBeNull();
});
});
});
我在互联网上找到的示例/教程只涉及“处理控制器内部的服务承诺”
因为我正在测试服务本身,所以我不能模仿功能(至少我是这么想的)
有人能把我引向正确的方向吗?使用下面的方法,
$firebaseObject
具有承诺性
resource/user.js
.factory('User', ['$firebaseRef','$firebaseObject', function UserFactory($firebaseRef,$firebaseObject) {
var ref = $firebaseRef.child('users');
var User = {
find:function(uid){
if(!uid)
return;
return $firebaseObject(ref.child(uid));
}
};
return User;
}]);
resource/test/user.spec.js
describe('resource.user', function() {
var User;
beforeEach(module('firebase'));
beforeEach(function() {
module('resource.user')
});
beforeEach(inject(function(_User_) {
User = _User_;
}));
it('should resolve the user data when a valid `id` has been given', function() {
User.find('some-uuid').then(function(data){
console.log(data);
expect(data).not.toBeNull();
});
});
});
这不是一个好办法。AngularFire应该在作用域上下文中使用,以便将数据与作用域同步。但是谢谢你的回答!