Nodejs Mocha: Невозможно проверить POST и GET по идентификатору - PullRequest
1 голос
/ 29 марта 2019

Попытка проверить запрос POST и получить по идентификатору. Для ошибки POST он гласит: «ожидал 200, получил 400». Затем для 3 GET по идентификаторам первые два - «Ошибка: превышено время ожидания 2000 мс ...», а затем дает мне два идентификатора через несколько минут. Затем третье: «Ожидается 404, получено 400».

Пробовал смотреть в документах на ожидание, супертест и мокко и не мог найти решение. Те 3 - это то, что я использую для этого тестирования

Вот тест POST

describe('POST /drinks', () => {
    it('should create a new drink', (done) => {
        let type = 'coffee';
        let name = 'testName';
        let image = 'testImage';

        request(app)
            .post('/drinks')
            .send({
                type,
                name,
                image
            }).expect(200).expect((res) => {
                expect(res.body.type, res.body.name, res.body.image).toBe(text);
            }).expect((res) => {
                expect(res.body.rating).toBe(number);
            }).end((err, res) => {
                if (err) {
                    return done(err);
                }

                Coffee.find({
                    type
                }).then((feedData) => {
                    expect(feedData.length).toBe(1);
                    expect(feedData[0].type).toBe(text);
                    done();
                }).catch(e => done(e));
            });
    });
});

Тогда вот ПОЛУЧИТЕ по ID:

describe('GET /drinks/:id', () => {
    it('should return individual drink document', (done) => {
        request(app)
            .get(`/drinks/${feedData[0]._id.toHexString()}`)
            .expect(200)
            .expect(res => {
                expect(res.body.drink.text).toBe(feedData[0].text);
            })
            .end((err, res) => {
                if (err) return done(err);
                done();
            });
    });

    it('should return 404 if drink is not found', (done) => {
        let hexId = new ObjectID().toHexString();

        request(app)
            .get(`/drinks/${hexId}`)
            .expect(404)
            .end((err, res) => {
                if (err) return done(err);
                done();
            });
    });

    it('should return 404 for non-object ids', (done) => {
        request(app)
            .get('/drinks/123abc')
            .expect(404)
            .end((err, res) => {
                if (err) return done(err);
                done();
            });
    });
});

Вот мой маршрут для POST:

// POST a drink
exports.postDrinks = (req, res) => {
  let type = req.body.type;
  if (!type) {
    res.status(400).send('Request parameters missing');
  }
  let newDrink;

  // Default Drink Fields
  let defaultFields = {
    type,
    name: req.body.name,
    tastingNotes: req.body.tastingNotes,
    comments: req.body.comments,
    image: req.body.image,
    rating: req.body.rating
  }

  // Determine which type and store it as that type
  switch (type) {
    case 'beer':
      newDrink = new Beer({
        ...defaultFields,
        style: req.body.style,
        source: req.body.source,
      });
      break;
    case 'coffee':
      newDrink = new Coffee({
        ...defaultFields,
        beanType: req.body.beanType,
        brewTime: req.body.brewTime,
        strength: req.body.strength
      });
      break;
    case 'liquor':
      newDrink = new Liquor({
        ...defaultFields,
        typOfLiquor: req.body.typOfLiquor
      });
      break;
    case 'tea':
      newDrink = new Tea({
        ...defaultFields,
        leafType: req.body.leafType,
        steepTime: req.body.steepTime,
      });
      break;
    default:
      console.log('Please select an apprioriate drink');
      break;
  }

  // Saves POST and sends it back as well. If not, then error
  newDrink.save().then((drink) => {
    res.send(drink);
  }, (e) => {
    res.status(400).send(e);
  });
}

Вот мой маршрут для GET по ID:

/ GET by ID
exports.getIndividualDrink = (req, res) => {
  let id = req.params.id;

  // Show everything but id and v
  Drink.findById(id).select('-_id -__v').then((drink) => {

    // Check if theres that drink and ID is valid
    if (!drink && !ObjectID.isValid(id)) {
      return res.status(401).send();
    }

    // If there is, then send it back
    res.send({
      drink
    });
  }, (e) => {
    res.status(400).send(e);
  });
};

Ожидается, что пройдет, но, как я сказал, результаты: 1) POST: «Ошибка: ожидается 200, получено 400» 2) Первые два GET по идентификатору: «Ошибка: превышено время ожидания 2000 мс. ....» 3) Последнее ПОЛУЧЕНИЕ по ID: «Ожидается 404, получено 400»

1 Ответ

0 голосов
/ 29 марта 2019

Ошибка 400 Bad Request - это код состояния HTTP, который означает, что запрос, отправленный на сервер, был каким-то образом неверным или поврежденным, и сервер не смог его понять. Попробуйте проверить свою схему, вы должны опубликовать все необходимые элементы, если вы пропустите что-то выброшено 400.

...