Supertest testing multipart request

System Information
  • Strapi Version: 3.4.6
  • Operating System: Linux Ubuntu 20.04 WSL
  • Database: SQLite
  • Node Version: 10
  • NPM Version: 6
  • Yarn Version: non used

Hello,
I have a issue when i try to test a multipart endpoint. I got error “Aborted”.

Here is my test :

   it("[UPDATE] GIVEN multipart request it should update a book and return it", async done => {
    const books = await find("book", { name: "testbook" });
    const book = books[0];
    const dotPathfile = path.resolve(__dirname, '../testUtils/dot.jpg');
    
    await request(strapi.server)
        .put("/books/" + book.id)
        .field("data", JSON.stringify({ name: "coucou multipart" }))
        .attach("files.logo", dotPathfile)
        .set("Authorization", "Bearer " + userInfo.jwt)
        .expect(200)
        .then((data) => {
            expect(data.body.name).toBe("coucou multipart");
        });
  

    done();
});

Here is my endpoint :

async update(ctx) {	  
    try {
	    const { id } = getParamsFromContext(ctx);
        let book = await bookHelper.findOwnedById(id, getTeamIdFromUser(ctx.state.user));

		if (!book) {
			return ctx.notFound();
		}

		if (isMultipart(ctx)) {
			const { data, files } = parseMultipartData(ctx);
				book = await bookHelper.update(id, data, files);
		} else {
			book = await bookHelper.update(id, ctx.request.body);
		}

		return bookHelper.sanitize(book);
		} catch (e) {
			throw e;
		}
	}

Here is my error :
Aborted

  at Test.<anonymous> (node_modules/superagent/src/request-base.js:304:21)
  at Test.abort (node_modules/superagent/src/request-base.js:510:8)
  at FormData.<anonymous> (node_modules/superagent/src/node/index.js:281:12)
  at FormData.Object.<anonymous>.CombinedStream._emitError (node_modules/combined-stream/lib/combined_stream.js:207:8)
  at DelayedStream.<anonymous> (node_modules/combined-stream/lib/combined_stream.js:133:10)
  at DelayedStream.<anonymous> (node_modules/delayed-stream/lib/delayed_stream.js:69:15)
      at Array.forEach (<anonymous>)
  at DelayedStream.Object.<anonymous>.DelayedStream.release (node_modules/delayed-stream/lib/delayed_stream.js:68:24)
  at DelayedStream.Object.<anonymous>.DelayedStream.resume (node_modules/delayed-stream/lib/delayed_stream.js:55:10)
  at DelayedStream.Object.<anonymous>.DelayedStream.pipe (node_modules/delayed-stream/lib/delayed_stream.js:76:8)
  at FormData.Object.<anonymous>.CombinedStream._pipeNext (node_modules/combined-stream/lib/combined_stream.js:121:12)
  at FormData.Object.<anonymous>.CombinedStream._realGetNext (node_modules/combined-stream/lib/combined_stream.js:99:10)
  at FormData.Object.<anonymous>.CombinedStream._getNext (node_modules/combined-stream/lib/combined_stream.js:82:12)

I don’t know why my test failed and how can i catch the error more precisly.
Thank.

Okay I just fixed my issue by handly writing the relative path to my file.

 it("[UPDATE] GIVEN multipart request it should update a book and return it", async done => {
    expect.assertions(2);
    const books = await find("book", { name: "testbook" });
    const book = books[0];
    
    await request(strapi.server)
        .put("/books/" + book.id)
        .field("data", JSON.stringify({ name: "coucou multipart" }))
        .attach("files.logo", "tests/testsUtils/dot.jpg") // Change to write handly picture path
        .set("Authorization", "Bearer " + userInfo.jwt)
        .set("Content-Type", "multipart/form-data")
        .expect(200)
        .then((data) => {
            expect(data.body.name).toBe("coucou multipart");
            expect(data.body.logo.name).toBe("dot.jpg")
        });
  
    done();
});