2017-08-07 1 views
1

Ich versuche, ein Populate Aufruf zu verspotten und ich möchte spotten, um Mungo-Objekte, nicht einfach JS-Objekte zurückzugeben.Mock Mongoose Objekte nach dem Auffüllen Anruf

sandbox.mock(BookModel) 
    .expects('populate') 
    .yields(null, [ 
    new BookModel({ 
     _id: mongoose.Types.ObjectId(), 
     name: 'Mock Book', 
     authorIds: [{ 
     name: 'Foo', 
     }] 
    }) 
    ]); 

Mit Schemata:

var BookSchema = new Schema({ 
    name: { type: String, required: true, unique: true }, 
    authorIds: [{type: Schema.Types.ObjectId, ref: 'Author'}], 
}); 

var AuthorSchema = new Schema({ 
    name: { type: String, required: true, unique: true }, 
}); 

jedoch Mungo meinen Test von verhindert, dass das Mock-Objekt mit einem Mock bevölkerten Autor als Mungo Erstellung wahrscheinlich ist die Überprüfung, dass die authorIds Array ein Array von Objekt-IDs ist.

Hat jemand sinon verwendet, um ein bevölkertes Feld wie dieses zu verspotten?

Antwort

1

Eine Möglichkeit besteht darin, nach der Erstellung des Mungo-Objekts etwas in das Array einzufügen. Die direkte Zuweisung des Arrays funktioniert auch nicht, daher müssen Sie für mehrere Elemente eine Schleife durchlaufen.

var book = new BookModel({ 
     _id: mongoose.Types.ObjectId(), 
     name: 'Mock Book', 
     authorIds: [] 
    }); 

book.authorIds[0] = { 
     name: 'Foo' 
     }; 

sandbox.mock(BookModel) 
    .expects('populate') 
    .yields(null, [book]); 
+0

Das funktioniert, danke! – lostintranslation

Verwandte Themen