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

时间:2015-03-26 14:12:21

标签: javascript meteor jasmine

我试图测试具有特定角色的登录用户是否可以更改其他用户角色。我正在使用meteor-jasmine与PhantomJS(但我也尝试过针对流星茉莉的默认浏览器Chrome)。

我创建了一个管理员用户(管理员角色自动分配给创建的第一个用户)和我的fixutes中的标准用户进行测试。然后,我在beforeEach

中登录管理员用户
describe('Users with manage-user role', function() {

    beforeEach(function(done) {
        Meteor.loginWithPassword('mgoldsborough@gmail.com', '12345678', function(error) {
            console.log('Logged in as admin');
            done();
        });
    });

我在afterEach注销了管理员。

    afterEach(function(done) {
        Meteor.logout(function() {
            console.log('Logged out');
            done();
        });
    });

在测试中,我想转到路径,向用户添加角色,然后检查更改是否反映在数据库中。 newUser._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_TIMEOUT_INTERVAL指定的超时时间内未调用异步回调。

Jasmine test timeout error

此外,Chrome抱怨newUser未定义:

  

Tracker afterFlush功能的异常:无法读取属性' _id'未定义的

为什么我的newUser变量未定义?为什么我的测试超时?有没有更好的方法来测试这个功能?

1 个答案:

答案 0 :(得分:-1)

在Tracker.afterFlush声明之后移动Router.go()。