Javascript 为什么我的异步Jasmine Meteor测试超时?

Javascript 为什么我的异步Jasmine Meteor测试超时?,javascript,meteor,jasmine,Javascript,Meteor,Jasmine,我试图测试具有特定角色的登录用户是否可以更改其他用户角色。我正在使用PhantomJS,但我也尝试过对meteor jasmine的默认浏览器Chrome进行测试 我正在创建一个管理员用户,管理员角色将自动分配给第一个创建的用户和我的补丁中要测试的标准用户。然后,我在beforeach中登录管理员用户 我每次登录后都会注销管理员 在测试中,我想转到一个路由,向用户添加一个角色,然后检查更改是否反映在数据库中。我正在记录的newUser.\u id未定义。我也尝试只记录newUser,但这也是未定

我试图测试具有特定角色的登录用户是否可以更改其他用户角色。我正在使用PhantomJS,但我也尝试过对meteor jasmine的默认浏览器Chrome进行测试

我正在创建一个管理员用户,管理员角色将自动分配给第一个创建的用户和我的补丁中要测试的标准用户。然后,我在beforeach中登录管理员用户

我每次登录后都会注销管理员

在测试中,我想转到一个路由,向用户添加一个角色,然后检查更改是否反映在数据库中。我正在记录的newUser.\u id未定义。我也尝试只记录newUser,但这也是未定义的

    it('should be able to change user roles', function(done) {
        Router.go('users');
        Tracker.afterFlush(function() {
            var newUser = Meteor.users.findOne({email: 'devon@radworks.io'});
            console.log('New user id: ' + newUser._id);
            $('#user-' + newUser._id + '-roles').val('manage-users');
            expect(Roles.userIsInRole(newUser, 'manage-users')).toBe(true);
            expect(Roles.userIsInRole(newUser, 'edit-any')).toBe(false);
            done();
        });
    });
});
我得到此测试的一个错误:

错误:超时-在jasmine.DEFAULT\u Timeout\u INTERVAL指定的超时内未调用异步回调

此外,Chrome还抱怨newUser未定义:

Tracker afterFlush函数异常:无法读取未定义的属性“\u id”


为什么我的newUser变量没有定义?为什么我的测试超时?是否有更好的方法测试此功能?

移动路由器。跟随Tracker.afterFlush声明。

Meteor.users是否确实包含您期望的用户?现在问题解决了吗?
    afterEach(function(done) {
        Meteor.logout(function() {
            console.log('Logged out');
            done();
        });
    });
    it('should be able to change user roles', function(done) {
        Router.go('users');
        Tracker.afterFlush(function() {
            var newUser = Meteor.users.findOne({email: 'devon@radworks.io'});
            console.log('New user id: ' + newUser._id);
            $('#user-' + newUser._id + '-roles').val('manage-users');
            expect(Roles.userIsInRole(newUser, 'manage-users')).toBe(true);
            expect(Roles.userIsInRole(newUser, 'edit-any')).toBe(false);
            done();
        });
    });
});