Nodejs Mocha:无法通过ID测试POST和GET

问题描述 投票:1回答:1

尝试通过ID测试POST请求和GET。对于POST错误,它说:“预期200,得到400”。然后对于3 GET ID,前两个是“错误:超过2000毫秒超时......”,然后几分钟后给我两个ID。然后第三个:“预期404,得到400”。

试图看看docs的期望,supertest和摩卡,并找不到解决方案。这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));
            });
    });
});

接下来是身份证的GET:

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);
  });
}

以下是ID的GET路线:

/ 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)前两个ID由ID:'错误:超过2000ms的超时。 ....'3)最后的GET ID:'预计404,得到400'

javascript node.js mocha supertest
1个回答
0
投票

400错误请求错误是一个HTTP状态代码,这意味着您发送到服务器的请求,某种程度上不正确或已损坏,服务器无法理解它。尝试检查您的架构,如果您错过了400投掷,您应该发布所有必需的项目。

© www.soinside.com 2019 - 2024. All rights reserved.