测试将 base64 转换为 url 的函数
Testing my function that converts base64 to url
我有将 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)
}
稍后在我的代码中,我在 <img/>
中的 src
处使用了此函数的 return。 它工作正常。
我的问题是我怎样才能正确测试它?
我只开发一个小测试
test('Util function convertB64ToUrl should convert given string to url', () => {
const initialData = convertB64ToUrl(btoa('Hello'))
expect(initialData).toStrictEqual(new Blob(['Hello'], { type: 'image/jpeg' }))
})
我会在这里使用快照测试:
import { readFileSync } from 'fs';
import path from 'path';
.....
const imgString = readFileSync(
path.resolve(__dirname, './imageStub.jpg'),
{ encoding: 'base64' }
).toString();
expect(convertB64ToUrl(imgString)).toMatchSnapshot();
不幸的是,URL.createObjectURL
的 jsdom does not provide 实现因此您可能需要使用 blob 序列化来模拟它:
global.URL.createObjectURL = blob => someSerializer(blob);
作为一个选项,您可以使用 blob-to-base64 包
我有将 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)
}
稍后在我的代码中,我在 <img/>
中的 src
处使用了此函数的 return。 它工作正常。
我的问题是我怎样才能正确测试它?
我只开发一个小测试
test('Util function convertB64ToUrl should convert given string to url', () => {
const initialData = convertB64ToUrl(btoa('Hello'))
expect(initialData).toStrictEqual(new Blob(['Hello'], { type: 'image/jpeg' }))
})
我会在这里使用快照测试:
import { readFileSync } from 'fs';
import path from 'path';
.....
const imgString = readFileSync(
path.resolve(__dirname, './imageStub.jpg'),
{ encoding: 'base64' }
).toString();
expect(convertB64ToUrl(imgString)).toMatchSnapshot();
不幸的是,URL.createObjectURL
的 jsdom does not provide 实现因此您可能需要使用 blob 序列化来模拟它:
global.URL.createObjectURL = blob => someSerializer(blob);
作为一个选项,您可以使用 blob-to-base64 包