Angularjs 解决工厂功能内部的承诺

Angularjs 解决工厂功能内部的承诺,angularjs,unit-testing,firebase,jasmine,Angularjs,Unit Testing,Firebase,Jasmine,好吧,我真的在谷歌上搜索了很多来了解这个问题。但我在谷歌或StackOverflow上找到的每一个可能的解决方案都不能真正解决我的问题 我的工厂 我的工厂有一个功能(find),它使用一个服务从数据库(在我的例子中是Firebase)检索数据。成功获取数据后,将检索到的数据分配给变量 问题 在我的测试套件中调用find时,包含检索到的数据的变量仍然为null。所以我想这个承诺还没有解决。我不知道如何才能做到这一点 我的代码 resource/user.js .factory('User', ['

好吧,我真的在谷歌上搜索了很多来了解这个问题。但我在谷歌或StackOverflow上找到的每一个可能的解决方案都不能真正解决我的问题

我的工厂
我的工厂有一个功能(
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应该在作用域上下文中使用,以便将数据与作用域同步。但是谢谢你的回答!