53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import fetch, { FetchMock } from 'jest-fetch-mock'
|
|
import { imageToDataUrl } from './imageToDataUrl'
|
|
|
|
const dummyPath = 'http://example.com/image.png'
|
|
const pixel = [
|
|
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49,
|
|
0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06,
|
|
0x00, 0x00, 0x00, 0x1f, 0x15, 0xc4, 0x89, 0x00, 0x00, 0x00, 0x0a, 0x49, 0x44,
|
|
0x41, 0x54, 0x78, 0x9c, 0x63, 0x00, 0x01, 0x00, 0x00, 0x05, 0x00, 0x01, 0x0d,
|
|
0x0a, 0x2d, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
|
0x60, 0x82
|
|
]
|
|
|
|
describe('imageToDataUrl', () => {
|
|
beforeEach(() => {
|
|
fetch.resetMocks()
|
|
const mockBlob = new Blob([new Uint8Array(pixel)], { type: 'image/png' })
|
|
const mockResponse = new Response(mockBlob)
|
|
;(fetch as FetchMock).mockResponseOnce(async () => {
|
|
const text = await mockResponse.text()
|
|
return text
|
|
})
|
|
})
|
|
|
|
it('should convert image to data URL', async () => {
|
|
function MockFileReader(this: any) {
|
|
this.readAsDataURL = function () {
|
|
this.result = 'data:image/png;base64,...'
|
|
setTimeout(() => this.onload(), 0)
|
|
}
|
|
}
|
|
|
|
window.FileReader = MockFileReader as any
|
|
|
|
const dataUrl = await imageToDataUrl(dummyPath)
|
|
|
|
expect(dataUrl).toBe('data:image/png;base64,...')
|
|
})
|
|
|
|
it('should handle errors in readAsDataURL', async () => {
|
|
function MockFileReader(this: FileReader) {
|
|
this.readAsDataURL = function () {
|
|
throw new Error('Mock error')
|
|
}
|
|
}
|
|
|
|
window.FileReader = MockFileReader as any
|
|
|
|
// Expect imageToDataUrl to reject with the mock error
|
|
await expect(imageToDataUrl(dummyPath)).rejects.toThrow('Mock error')
|
|
})
|
|
})
|