Я пытаюсь проверить конечную точку входа в систему с помощью супертеста. Я знаю, что код для API правильный, потому что когда я делаю тест на Почтальоне, он работает. Однако, когда я делаю это с помощью автоматического тестирования, я получаю сообщение об ошибке. В частности, я делаю запрос .post к своей конечной точке входа в систему, передаю пользователя, ожидаю получить код состояния 200. В итоге я получаю код состояния 401, который в моем коде обозначает «неверные учетные данные». Может ли кто-нибудь помочь мне выяснить, почему это происходит, и направить меня в правильном направлении для правильного проведения моего тестирования?
моего файла тестирования (auth-router.spe c. js):
const request = require('supertest');
const server = require('../api/server');
const users = require('./users-model');
const db = require('../database/dbConfig');
describe('auth router', function() {
describe('test environment', function() {
it('should use the testing environment', function() {
expect(process.env.DB_ENV).toBe('testing');
})
})
})
describe('POST /api/auth/register tests', function() {
beforeEach(async () => {
await db('users').truncate();
})
describe('insert()', function() {
it('adds a new user to the database', async function() {
await users.add({ username: 'jevon', password: 'cochran' });
const table = await db('users');
expect(table).toHaveLength(1);
})
it('should insert provided user into the database', async function() {
let newUser = await users.add({ username: 'leroy', password: 'gatlin' });
expect(newUser.username).toBe('leroy');
})
})
describe('POST /api/auth/login tests', function() {
it('returns 200 OK', async function() {
return request(server)
.post('/api/auth/login')
.send({ username: 'leroy', password: 'gatlin' })
.then(res => {
expect(res.status).toBe(200);
})
})
})
})
auth-router. js:
const router = require('express').Router();
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const users = require('./users-model');
router.get('/', (req, res) => {
res.status(200).json({ api: 'up' });
})
router.post('/register', (req, res) => {
let user = req.body;
console.log(user);
const hash = bcrypt.hashSync(user.password, 8);
user.password = hash;
users.add(user)
.then(added => {
console.log(user);
res.status(201).json(added);
})
.catch(error => {
console.log(error);
res.status(500).json({ errorMessage: 'unable to register user' });
})
});
router.post('/login', (req, res) => {
let { username, password } = req.body;
users.findBy({ username })
.first()
.then(user => {
if(user && bcrypt.compareSync(password, user.password)) {
const token = generateToken(user);
res.status(200).json({
messsage: `Welcome ${user.username}`,
token
})
} else {
res.status(401).json({ message: 'Invalid credentials' });
}
})
.catch(error => {
console.log(error);
res.status(500).json({ errorMessage: 'unable to login' });
})
});
function generateToken(user) {
const payload = {
username: user.username
}
const secret = process.env.JWT_SECRET || 'top secret';
const options = {
expiresIn: '1h'
}
return jwt.sign(payload, secret, options);
}
module.exports = router;
Вот что происходит, когда я запускаю свои тесты: