摩卡测试不等待Publication/Subscription
Mocha test is not waiting for Publication/Subscription
堆栈
使用 Mocha + Velocity (0.5.3) 进行 Meteor 客户端集成测试。假设我安装了 autopublish 包。
问题
如果 MongoDB 上的文档是从服务器插入的,客户端 mocha 测试将不会等待订阅同步,从而导致断言失败。
代码示例
服务器端Accounts.onCreateUser
挂钩:
Accounts.onCreateUser(function (options, user) {
Profiles.insert({
'userId': user._id,
'profileName': options.username
});
return user;
});
客户端摩卡测试:
beforeEach(function (done) {
Accounts.createUser({
'username' : 'cucumber',
'email' : 'cucumber@cucumber.com',
'password' : 'cucumber' //encrypted automatically
});
Meteor.loginWithPassword('cucumber@cucumber.com', 'cucumber');
Meteor.flush();
done();
});
describe("Profile", function () {
it("is created already when user sign up", function(){
chai.assert.equal(Profiles.find({}).count(), 1);
});
});
问题
如何让 Mocha 等待我的个人资料文档到达客户端以避免 Mocha 超时(从服务器创建)?
您可以被动地等待文件。 Mocha 有超时时间,所以如果没有创建文档,它会在一段时间后自动停止。
it("is created already when user signs up", function(done){
Tracker.autorun(function (computation) {
var doc = Profiles.findOne({userId: Meteor.userId()});
if (doc) {
computation.stop();
chai.assert.propertyVal(doc, 'profileName', 'cucumber');
done();
}
});
});
Accounts.createUser 有一个可选的回调,只需在此回调中调用 done 函数,如:
beforeEach(function (done) {
Accounts.createUser({
'username' : 'cucumber',
'email' : 'cucumber@cucumber.com',
'password' : 'cucumber' //encrypted automatically
}, () => {
// Automatically logs you in
done();
});
});
describe('Profile', function () {
it('is created already when user sign up', function () {
chai.assert.equal(Profiles.find({}).count(), 1);
});
});
堆栈
使用 Mocha + Velocity (0.5.3) 进行 Meteor 客户端集成测试。假设我安装了 autopublish 包。
问题
如果 MongoDB 上的文档是从服务器插入的,客户端 mocha 测试将不会等待订阅同步,从而导致断言失败。
代码示例
服务器端Accounts.onCreateUser
挂钩:
Accounts.onCreateUser(function (options, user) {
Profiles.insert({
'userId': user._id,
'profileName': options.username
});
return user;
});
客户端摩卡测试:
beforeEach(function (done) {
Accounts.createUser({
'username' : 'cucumber',
'email' : 'cucumber@cucumber.com',
'password' : 'cucumber' //encrypted automatically
});
Meteor.loginWithPassword('cucumber@cucumber.com', 'cucumber');
Meteor.flush();
done();
});
describe("Profile", function () {
it("is created already when user sign up", function(){
chai.assert.equal(Profiles.find({}).count(), 1);
});
});
问题
如何让 Mocha 等待我的个人资料文档到达客户端以避免 Mocha 超时(从服务器创建)?
您可以被动地等待文件。 Mocha 有超时时间,所以如果没有创建文档,它会在一段时间后自动停止。
it("is created already when user signs up", function(done){
Tracker.autorun(function (computation) {
var doc = Profiles.findOne({userId: Meteor.userId()});
if (doc) {
computation.stop();
chai.assert.propertyVal(doc, 'profileName', 'cucumber');
done();
}
});
});
Accounts.createUser 有一个可选的回调,只需在此回调中调用 done 函数,如:
beforeEach(function (done) {
Accounts.createUser({
'username' : 'cucumber',
'email' : 'cucumber@cucumber.com',
'password' : 'cucumber' //encrypted automatically
}, () => {
// Automatically logs you in
done();
});
});
describe('Profile', function () {
it('is created already when user sign up', function () {
chai.assert.equal(Profiles.find({}).count(), 1);
});
});