Я действительно борюсь с тестированием Чай, особенно сейчас, когда я начал использовать мангусты Promises и Async / Await.Заранее извиняюсь за длинный пост, но каждая часть необходима для формирования более широкой картины.
Это приложение для доски объявлений (FCC для всех, кто знаком).3 модели для доски, темы, ответа с реф.При создании моей цепочки потоков нужна доска _id
.
- В моем тесте Chai я жестко кодирую доску сообщений
_id
.Этот объект потока создает в базе данных, но поле board
не добавляется, и я не могу понять, почему. - Вторая проблема заключается в том, что тест CHAI не возвращаеттело в ответе - возвращает
{}
.Так что мне нечего утверждать.Функция newThread
возвращает объект data
из new_thread.save(function (err, data)
, поскольку у меня был новый _id для массива поддокументов Board / threads
Схема потоков
const ThreadSchema = new Schema({
"text": {'type': String},
"delete_password": { 'type': String,'select': false},
"created_on": {'type': Date, 'default': new Date()},
"bumped_on": {'type': Date, 'default': new Date()},
"reported": {'type': Boolean,'select': false,'default': false},
"replycount":{'type': Number,'default': 0},
"board": {'type': mongoose.Schema.Types.ObjectId,'ref': 'Board'},
"replies": [{'type': mongoose.Schema.Types.ObjectId,'ref': 'Reply'}]
});
Создать функцию потока
this.newThread = function(req, res) {
let threadText = req.body.text;
let passwordText = req.body.delete_password;
let boardTitle = req.params.board;
const new_thread = new models.Thread({
text: threadText,
delete_password: passwordText,
board:currentBoardId //currentBoardId defined & set earlier
});
new_thread.save(function (err, data) {
models.Board
.findOne({ board_title: boardTitle})
.then(board => {
if (board == null) {
res.json({ message: "Cannot find board named, " + boardTitle });
} else {
board.threads.push(data._id);
board.save(function (err){
if (err) {console.log(err);}
res.end();
});
}
})
.catch(err => {
return res.status(500).json({ message: err.message })
})
})
};
CHAI test
test('Every field filled in', function(done) {
chai.request(server)
.post('/api/threads/test')
.send({
board: ObjectId('5d8f748a1d788a3be2b9a7b7'), // board test _id Never gets added to database
text: 'POST - new thread - test thread text',
delete_password: 'password'
})
.end(function(err, res){
expect(err).to.be.null;
assert.equal(res.status, 200);
console.log(res.body); // returns {}
done();
});
});