0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cypress で画像ファイルをエンコードせずに読み込みたい

Posted at

Cypress で画像ファイルをエンコードせずに読み込もうとした際に苦労したので、その方法を紹介します。

困ったこと

Cypress を使って、Amazon S3 に画像ファイルをアップロードする処理をテストするコードを以下のように実装しました。

./cypress/integration/upload-file-spec.ts
describe('シナリオテスト', () => {
  it('画像ファイルアップロード', () => {
    // (1)
    cy.fixture('image.png', 'binary').then((image) => {
      cy.request({
        method: 'PUT',
        url: 'アップロード先のURL',
        body: image,
      }).then((response) => {
        expect(response.status).to.eq(200);
      });
    });
  });
});
項番 説明
(1) エンコード形式を binary にして画像ファイルを読み込みます。

上記のコードを実行するとアップロード自体はできます。
しかし、S3 にアップロードされた画像ファイルを開こうとすると、ファイルが壊れていて開けません。
ファイルをメモ帳などで開いてみると、元ファイルから微妙に中身が変わっていました。

解決法

画像ファイルを読み込む際のエンコード形式に null を指定して buffer 形式で読み込みます。
その後 new Blob() でバイナリ形式に戻すことで正常に画像ファイルをアップロードできます。

./cypress/integration/upload-file-spec.ts
describe('シナリオテスト', () => {
  it('画像ファイルアップロード', () => {
    // (1)
    cy.fixture('image.png', null).then((image) => {
      cy.request({
        method: 'PUT',
        url: 'アップロード先のURL',
        // (2)
        body: new Blob(image),
      }).then((response) => {
        expect(response.status).to.eq(200);
      });
    });
  });
});
項番 説明
(1) エンコード形式を null にして buffer 形式で画像ファイルを読み込みます。
(2) buffer 形式からバイナリ形式にして画像ファイルをアップロードします。

余談

binary で読み込めばいいだろうと思っていたので、解決に時間がかかりました。
使っているツールの知識だけじゃなく、エンコードやバイナリファイルの仕様などツールによらない知識も必要であることを痛感しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?