Чай тест мангуст - PullRequest
       36

Чай тест мангуст

0 голосов
/ 29 сентября 2019

Я действительно борюсь с тестированием Чай, особенно сейчас, когда я начал использовать мангусты Promises и Async / Await.Заранее извиняюсь за длинный пост, но каждая часть необходима для формирования более широкой картины.

Это приложение для доски объявлений (FCC для всех, кто знаком).3 модели для доски, темы, ответа с реф.При создании моей цепочки потоков нужна доска _id.

  1. В моем тесте Chai я жестко кодирую доску сообщений _id.Этот объект потока создает в базе данных, но поле board не добавляется, и я не могу понять, почему.
  2. Вторая проблема заключается в том, что тест 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();
  });
});
...