Ich habe ein Mungo-Modell mit einer statischen Funktion, die ein Mitarbeiterdokument nach ID findet und die referenzierten Felder manager
und interviewer
füllt.Komponententest: Wie mongoose Code zu verspotten, wenn Sie populate verwenden?
employeeSchema.statics.findAndPopulateById = function(id) {
return this.findById(id)
.populate("manager", "firstname lastname email")
.populate("interviewer", "email")
.then(employee => {
if (!employee) {
throw new errors.NotFoundError();
}
return employee;
});
}
Ich verstehe, wie diese Funktion zu testen, wenn es nicht die bevölKette enthält, aber der Bestücken-Teil mich für eine Schleife zu werfen.
Insbesondere Ich versuche, zu testen, ob die NotFoundError
Ausnahme ausgelöst wird, wenn kein passender Datensatz gefunden wird, aber ich bin verwirrt, wie die findById
Methode zu verspotten, so dass .populate()
auf dem Rückgabewert bezeichnet werden.
Wenn ich diese Methode zu testen wurde ohne die .populate()
Kette, würde ich so etwas wie
let findByIdMock = sandbox.stub(Employee, 'findById');
findByIdMock.resolves(null);
return expect(Employee.findAndPopulateById('123')).to.be.rejectedWith(errors.NotFoundError);
tut Aber dieser Ansatz ist natürlich nicht funktioniert, wenn bevöl beteiligt ist. Ich denke, ich sollte eine verspottete Frage oder etwas Ähnliches zurückgeben, aber ich muss auch in der Lage sein, wieder auf diesen Spott zu antworten oder ihn als Versprechen zu lösen.
Wie schreibe ich einen Test für diesen Code? Sollte meine Funktion anders strukturiert sein?