我无法使我的单元测试通过,我认为这是因为它使用错误类型的数据发布。我的路线:
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')
)
答案 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();
});
});