Я использую промежуточное ПО save
в Mongoose для создания журнала активности в БД всякий раз, когда предпринимаются какие-либо действия. Что-то вродеТестирование асинхронных промежуточных функций с Mongoose
UserSchema.post("save", function (doc) {
mongoose.model("Activity").create({activity: "User created: " + doc._id});
});
Это, кажется, работает хорошо, но проблема в том, что я не могу проверить это, потому что нет никакого способа, чтобы передать функцию обратного вызова к post
(который, вероятно, не имеет смысла). Я проверить это с помощью mocha
с:
User.create({name: "foo"}, function (err, user) {
Activity.find().exec(function (err, act) {
act[0].activity.should.match(new RegExp(user._id));
done();
});
});
Проблема заключается в том, что Activity.create
по-видимому, не закончить до .find
называется. Я могу обойти это, обернув .find
в setTimeout
, но это кажется мне взломанным. Есть ли способ протестировать асинхронные операции промежуточного ПО Mongoose?
'waterfall' будет иметь такую же проблему, поскольку операция промежуточного программного обеспечения может не завершиться, даже если' User.create' делает (и вызывает 'done').Поэтому я думаю, что ответ использует 'setTimeout':/ –
Вы говорите, что вызов Create полностью завершен (не возвращается вообще и не вызывает обратный вызов)? – WiredPrairie
Нет, 'create' отлично работает, но в вашем примере' done' вызывается до завершения 'Activity.create', поэтому' .find' ничего не найдет. –