Я просто переписал backbone-mongodb, чтобы быть действительно совместимым с позвоночником. В оригинальном решении были хорошие обеты для тестирования, и я бы хотел, чтобы мой код также прошел тестирование, но просто не знаю, как это сделать.модульное тестирование в javascript: как вы издеваетесь? - a (трудный для меня) пример
Вот пример, я хотел бы проверить:
update: function(callback) {
var model = this.model;
this._withCollection(function(err, collection) {
if (err) callback(err);
else {
var attributes = _.clone(model.attributes);
delete attributes['_id'];
collection.update({ _id: new ObjectID(model.id) }, {$set: attributes}, {safe:true, upsert:false}, function(err) {
model.fetch();
callback(null, model.toJSON());
});
}
});
},
Этот код не имеет ничего особенного в нем. Он использует собственный драйвер node-mongodb и обновляет запись в базе данных. AFAIK, правильное тестирование означало бы, по крайней мере, проверить, что (1) collection.update
был вызван с данными аргументами, (2) callback
вызывается, когда и каким он должен быть, (3) модель содержит новые данные.
С обетами я могу проверить (2), но понятия не имею, как проверить (1). На самом деле, то же самое относится к каждой инфраструктуре модульного тестирования, о которой я знаю, qUnit, Jasmine. Я уверен, что это можно сделать как-то, и я решил изучить хотя бы один из них, но трудно сделать выбор, когда вы застряли в начале. :)
Я знаю о sinon.js и думаю, что каждое из них можно протестировать, издеваясь над всеми объектами, которые у меня есть, пока я не получу свою фальшивку, но это кажется очень неуклюжим. Может ли кто-нибудь помочь мне в написании вышеуказанных тестов, пожалуйста, и я с удовольствием выпишу учебник по этому поводу?
как сбор и модель передается в класс обновлений? –
Вы можете увидеть вызов '_withCollection'. Фактически, я устанавливаю переменную 'this.collectionName', а' _withCollection' извлекает коллекцию с учетом ее имени и вызывает обратный вызов с возвращенной коллекцией. Это общий подход с node.js. Вы используете обратные вызовы повсюду, так как структура полностью асинхронна. – Akasha