我在Loopback框架中使用REST API。在那我有POST方法,我接受一个有效载荷和3个不同的文件。代码看起来像这样
@post("/v1/api/order", {
responses: {
200: {
content: {
"application/json": { schema: { "x-ts-type": Order } },
"multipart/mixed": {
"x-parser": "stream",
schema: { type: "object" }
}
},
description: "Order model instance"
}
}
})
public async createOrder(
@requestBody({
content: {
"multipart/form-data": {
"x-parser": "stream",
schema: { type: "object" }
}
},
description: "multipart/form-data value.",
required: true
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response): Promise<any> {
this.logger.info(`createOrder`, { userId: "loggedOn User", method: "createOrder" });
const fileUpload = new FileUploader();
const aHelper = new AttachmentHelper();
const results: any = await fileUpload
.multerFileUpload(request, response)
.then((result: any) => {
return {
attachmentDetails: aHelper.attachmentInformation(result),
orderDetails: _.get(result.fields, "payload")
};
})
.catch((err: Error) => {
response.status(400);
this.logger.error("createOrder", err.stack, "error occured while create order");
throw err;
});
我正在编写端到端测试,但无法使用send方法发送有效负载。我正在使用testlab。任何人都可以建议如何为此编写测试用例。
it.only('Insert the order', async () => {
const neworder = givenNewOrderPayload();
console.log("New Order Payload.", neworder);
await client.post(`/v1/api/order`)
.set('Content-Type', 'multipart/form-data')
.set(neworder)
.expect(200)
}
function givenNewOrderPayload() {
let userInput = a;
return {'payload': userInput}
}
我期待数据插入到具有200状态代码的数据库中。实际结果:400错误请求
我正在编写端到端测试,但无法使用send方法发送有效负载。我正在使用testlab。
LoopBack的testlab
模块暴露了supertest
,它使用superagent
作为HTTP客户端库。
要发送上传文件的多部分请求,您应该使用attach
中描述的their docs方法。
另请参阅LoopBack如何在内部测试文件上载,例如在packages/rest/src/__tests__/acceptance/file-upload/file-upload.acceptance.ts
:
it('supports file uploads', async () => {
const FIXTURES = path.resolve(__dirname, '../../../../fixtures');
const res = await client
.post('/show-body')
.field('user', 'john')
.field('email', '[email protected]')
.attach('testFile', path.resolve(FIXTURES, 'file-upload-test.txt'), {
filename: 'file-upload-test.txt',
contentType: 'multipart/form-data',
})
.expect(200);
expect(res.body.files[0]).containEql({
fieldname: 'testFile',
originalname: 'file-upload-test.txt',
mimetype: 'multipart/form-data',
});
});