Узел Express Конечные точки JEST Supertest PUT и DELETE возвращают 405 «Метод не разрешен» - PullRequest
0 голосов
/ 13 января 2020

Я выполняю простой тест на узле с Express и suppertest. Есть 10 тестов, из которых тесты POST и GET работают хорошо (первые 6 тестов). Остальные четыре, имеющие PUT и DELETE, возвращают 405 «Метод не разрешен». Это мой код:

test('Should login existing user', async () => {
  await request(app)
        .post('/api/auth')
        .send({ 
          email: userOne.email,
          password: userOne.password
        })
        .expect(200);
});


test('Should NOT login nonexisting user', async () => {
  await request(app)
        .post('/api/auth')
        .send({ 
          email: userThree.email,
          password: userThree.password
        })
        .expect(400);
});


test('Should get profile for authenticated user', async () => {
  await request(app)
        .get('/api/auth')
        .set('x-auth-token', userOne.token)
        .expect(200)
});


test('Should NOT get profile for unauthenticated user', async () => {
  await request(app)
        .get('/api/auth')
        .expect(401)
});


test('Should create a new user', async () => {
  await request(app)
        .post('/api/person')
        .set('x-auth-token', userOne.token)
        .send({ ...userTwo })
        .expect(201);
});


test('Should NOT create a new user', async () => {
  await request(app)
        .post('/api/person')
        .send({ ...userTwo })
        .expect(401);
});


test('Should update user for autheticated user', async () => {
  await request(app)
        .put('api/person/2')
        .set('x-auth-token', userOne.token)
        .send({ role: 1})
        .expect(200)
});


test('Should NOT update user for unauthenticated user', async () => {
  await request(app)
        .put('api/person/2')
        .send({ role: 1})
        .expect(401)
});


test('Should delete user for autheticated user', async () => {
  await request(app)
        .delete('api/person/2')
        .set('x-auth-token', userOne.token)
        .send()
        .expect(200)
});


test('Should NOT delete user for unauthenticated user', async () => {
  await request(app)
        .delete('api/person/2')
        .expect(401)
});

Как я уже говорил выше, первая шестерка с аутентификацией и без нее работает fantasti c. Нижние 4 с запросами PUT и DELETE возвращают 405 «Метод не разрешен». Тестируя те же маршруты с почтальоном, я не испытывал никаких проблем. Методы DELETE и POST работают как положено. Кто-нибудь знает, что я делаю не так? Что я пропускаю? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 15 января 2020

Нет ничего плохого в методах DELETE и PUT. Причиной была простая опечатка (отсутствует / перед вызовом 'api / person / 2'). К сожалению, это происходило только в методах DELETE и PUT, что заставляло отладку занимать больше времени, думая, что проблема в методах. Ошибка была намного проще. Путь был неверный.

...