NodeJs - не удалось выполнить запрос Mongoose в API только в тесте Mocha Chai - PullRequest
0 голосов
/ 24 октября 2019

Я новичок в модульном тестировании в Мокке / Чай и застрял в этой проблеме. У меня есть POST для регистрации нового пользователя. В этом посте я проверяю, есть ли пользователь в базе данных.

if(error) return res.status(400).send(error.details[0].message);
console.log('check this ' +  req.body.email);
//console.log(`Connected to ${db}...`)
console.log(`Connected to ${User.db.mongoose}...`)
let user = await User.findOne({ email: req.body.email});
console.log(user);
if(user) return res.status(400).send('User already registered');

То, что я обнаружил в первом тесте, зарегистрирует пользователя (вставит информацию в БД). Я обнаружил, что второй тест не пройден.

it('Should reject duplicate new user', async() => {
        const res = await request(server)
            .post('/api/users/')
            .send({firstname: sFirstName, lastname: sLastName, email: sEmail, password: sPassword});

        expect(res.status).to.be.equal(400);
        expect(res.error).to.be.equal('User already registered');

    });

Причина сбоя заключается в том, что строка соединения, в которой не выполняется запрос, не возвращает никаких записей. Итак, я протестировал запрос в Postman и POST API работает как положено. Мне любопытно, если кто-нибудь знает, почему запрос mongoose не будет работать, когда я запускаю тест в Mocha, а работает, когда я соединяюсь через почтальона. Любые мысли будут оценены.

const {User, validate} = require('../models/user');


module.exports = function() {
    //Database connection 
    const db = config.get('db');
    mongoose.connect(db,{ useNewUrlParser: true })
        .then(() => console.log(`Connected to ${db}...`))
        .catch(err => console.error(`Could not connect to ${db}...`, err));

}

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Спасибо всем. Я нашел проблему. Я использую BeforeEach для очистки моей пользовательской таблицы, поэтому таблица пуста во втором тесте. Я изменил свои тесты.

beforeEach(async() => {
    server = require('../index');
    await User.remove({});
});

Еще раз спасибо!

0 голосов
/ 24 октября 2019

не могли бы вы добавить фрагмент, где вы подключаетесь к дБ. Еще одна вещь, которую вы должны проверить, это если вы установите другую среду для вашего теста, такую ​​как тест дБ, который вы еще не настроили

...