使用Chai的Post方法(Node.js)

时间:2017-12-14 17:33:58

标签: javascript node.js express chai

我无法使我的单元测试通过,我认为这是因为它使用错误类型的数据发布。我的路线:

let upload = multer({
  storage: storage
});

router.route('/')
    .post(upload.any('image'), function (req, res, next) {
        let memory = new Memory();
        if (req.files.length === 0) {
          Object.assign(memory, req.body);
        } else {
          Object.assign(memory, req.body, {'image': req.file.secure_url});
        }

        memory.save(function (err) {
            if (err) {
                return res.send(err);
            }
            res.json({message: 'Memory Created', memory});
        });
    })

正如您所看到的,我的路线使用multer接受form-data作为输入。但是,在我的Chai test

it('it should not post an item without a location field', (done) => {
      let formData = new FormData();
      formData.append('description', "First time we met");
      formData.append('image','n/a');

        chai.request(server)
            .post('/api/memory')
            .set('Accept', 'application/form-data')
            .send(formData)
            .end((err, res) => {
                res.should.have.status(200);
                res.body.should.be.a('object');
                res.body.should.have.property('errors');
                res.body.errors.should.have.property('location');
                res.body.errors.location.should.have.property('kind').eql('required');
                done();
            });

我正在使用Chai的send方法,但这个测试只是冻结并且没有给我任何回应。所以我尝试使用postman,如果我使用x-www-form-urlencoded发送数据,那就太费了但是如果我使用form-data发送数据就可以了。所以我怀疑我使用Chai在x-www-form-urlencded发送数据。我该如何解决? (注意:我尝试使用.set('Accept', 'application/form-data')

1 个答案:

答案 0 :(得分:0)

只需使用.field()

即可
describe('/POST item', () => {
    it('it should not post an item without a location field', (done) => {
        chai.request(server)
            .post('/api/memory')
            .set('Accept', 'application/form-data')
            .field('description', "First time we met")
            .end((err, res) => {
                res.should.have.status(200);
                res.body.should.be.a('object');
                res.body.should.have.property('errors');
                res.body.errors.should.have.property('location');
                res.body.errors.location.should.have.property('kind').eql('required');
                done();
            });
    });