2016-02-24 3 views
0

Я использую supertest, mocha и ожидаю тестирования своего приложения. Я столкнулся с проблемой, когда возвращаемый документ равен null, и нет ошибки.Вопрос о выпуске супертеста mongoose

router.get('/user', function (req, res) { 
    User.findOne({ 
     _id: '56c59bb07a42e02d11a969ae' 
    }, function (err, user) { 

     if(err) return res.status(404).json({message: 'not found: ' + err.message}); 

     res.status(200).json(user); 
    }); 
}); 

Когда я проверить это на Почтальон я всегда получаю 200, который является то, что я ожидал, но когда я запускаю тест я получаю 404 :(

Мой простой тестовый код ниже, где я всегда получаю 404.

it('get user', function (done) { 
     request(app) 
      .get('/user') 
      .expect(200) 
      .end(function (err, res) { 

       if (err) throw err; 
       done(); 
      }); 
}); 

Оба почтальона и испытание имеют в виду ту же базу данных мангустов, поэтому я уверен, что он должен быть в состоянии принести пользователю. Как мангуст и приложение настроены на моем сервере ниже.

mongoose.connect('mongodb://localhost/scratch', options); 

app.listen(port, function() { 
    console.log('Scratch started on port ' + port); 
}); 

Есть ли что-то, что нужно сделать, чтобы оно работало?

ответ

0

Я немного изменил тест, когда Пользователь создан на «раньше».

before(function (done) { 
      connection.on('error', console.error); 
      connection.once('open', function() { 
       done(); 
      }); 
      mongoose.connect(config.db[process.env.NODE_ENV]); 

      var userInfo = { 
       "username": "[email protected]", 
       "password" : "123456", 
       "nickname": "naz" 
      } 

      var newUser = User(userInfo); 

      newUser.save(function (err, doc) { 
       if(err) { 
        console.log('err: ' + err.message); 
       } else{ 
        console.log('saved'); 
       } 

      }) 

      console.log(mongoose.connection.readyState); 
      done(); 
     }); 

Затем прошел тот же тест, и он сработал!

Я полагаю, что во время теста приложение запрашивает документы в памяти (я проверял, что проверка db и нового пользователя не была добавлена), а не на существующий документ, который я ожидал при тестировании с помощью Postman. Это означает, что мне нужно сначала вынести тестовый db, прежде чем я смогу использовать его для теста.

Я новичок в Nodejs, и мне любопытно, что заставило документы создаваться в памяти и как mongoose/express знает, что он управляется тестированием/supertest и ведет себя соответственно.

Смежные вопросы