Multipart数据的端到端测试

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

我在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错误请求

typescript loopback
1个回答
1
投票

我正在编写端到端测试,但无法使用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',
    });
  });
© www.soinside.com 2019 - 2024. All rights reserved.