【问题标题】:End to End testing for Multipart data多部分数据的端到端测试
【发布时间】:2019-09-12 18:01:50
【问题描述】:

我在 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 方法发送有效负载。我正在使用测试实验室。谁能建议如何为此编写测试用例。

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 Bad Request

【问题讨论】:

    标签: typescript loopback


    【解决方案1】:

    我正在编写端到端测试,但无法使用 send 方法发送有效负载。我正在使用测试实验室。

    LoopBack 的 testlab 模块在底层暴露了 supertest,它使用 superagent 作为 HTTP 客户端库。

    要发送上传文件的多部分请求,您应该使用their docs 中描述的attach 方法。

    另请参阅 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', 'john@example.com')
          .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',
        });
      });
    

    【讨论】:

    • 谢谢!我会试试这个。
    • 我试过这个但得到以下错误错误:预期 200“OK”,得到 500“内部服务器错误”
    • 我可以确认,此解决方案有效。谢谢@M.R
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多