测试我的将 base64 转换为 url 的函数

发布于 2025-01-11 20:29:46 字数 949 浏览 0 评论 0原文

我有我的函数将 base 64 转换为 url

function convertB64ToUrl(cameraImage: string): string {
    const byteString = atob(cameraImage)
    const arrayBuffer = new ArrayBuffer(byteString.length)
    const uint8Array = new Uint8Array(arrayBuffer)

    for (let i = 0; i < byteString.length; i++) {
        uint8Array[i] = byteString.charCodeAt(i)
    }
    const blob = new Blob([arrayBuffer], { type: 'image/jpeg' })

    return URL.createObjectURL(blob)
}

稍后在我的代码中,我在 中的 src 处使用了该函数的返回。 它工作正常。

我的问题是如何正确测试它

我只开发一个小测试

test('Util function convertB64ToUrl should convert given string to url', () => {
    const initialData = convertB64ToUrl(btoa('Hello'))
    expect(initialData).toStrictEqual(new Blob(['Hello'], { type: 'image/jpeg' }))
})

I have my function to convert base 64 to url

function convertB64ToUrl(cameraImage: string): string {
    const byteString = atob(cameraImage)
    const arrayBuffer = new ArrayBuffer(byteString.length)
    const uint8Array = new Uint8Array(arrayBuffer)

    for (let i = 0; i < byteString.length; i++) {
        uint8Array[i] = byteString.charCodeAt(i)
    }
    const blob = new Blob([arrayBuffer], { type: 'image/jpeg' })

    return URL.createObjectURL(blob)
}

Later in my code I used return of this function at src in <img/>. It works fine.

My question is how can I properly test it?

I develop only one small test

test('Util function convertB64ToUrl should convert given string to url', () => {
    const initialData = convertB64ToUrl(btoa('Hello'))
    expect(initialData).toStrictEqual(new Blob(['Hello'], { type: 'image/jpeg' }))
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遮云壑 2025-01-18 20:29:46

我在这里使用快照测试:

import { readFileSync } from 'fs';
import path from 'path';

.....
  const imgString = readFileSync(
    path.resolve(__dirname, './imageStub.jpg'),
    { encoding: 'base64' }
  ).toString();
  expect(convertB64ToUrl(imgString)).toMatchSnapshot();

不幸的是,jsdom 不提供实现 URL.createObjectURL 因此您可能需要使用 blob 序列化来模拟它:

global.URL.createObjectURL = blob => someSerializer(blob);

作为一个选项,您可以使用 blob-to-base64

I'd use snapshot test here:

import { readFileSync } from 'fs';
import path from 'path';

.....
  const imgString = readFileSync(
    path.resolve(__dirname, './imageStub.jpg'),
    { encoding: 'base64' }
  ).toString();
  expect(convertB64ToUrl(imgString)).toMatchSnapshot();

Unfortunately, jsdom does not provide implementation for URL.createObjectURL so you may need to mock it with blob serialization:

global.URL.createObjectURL = blob => someSerializer(blob);

As an option you can use blob-to-base64 package

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文