Jest로 웹 작업자를 테스트하는 방법
fibonacci
함수는 웹 작업자가 수행하는 무거운 작업입니다(코드 here를 따를 수 있음).우선 작업자의 주요 기능을 분리해야 합니다. 이 경우에는
fibonacci
함수( src/fibonacci.js
)이기 때문에 매우 간단합니다.let fibonacci = (num) => {
if (num <= 1) return 1;
return fibonacci(num - 1) + fibonacci(num - 2);
}
export default fibonacci
작업자를 최소한으로 유지합니다(
src/fibonacci.worker.js
):import fibonacci from "./fibonacci";
self.onmessage = async function (e) {
self.postMessage(fibonacci(e.data));
};
이렇게 하면 구현의 웹 작업자 부분만 조롱할 수 있습니다(
src/__mocks__/fibonacci.worker.js
).import fibonacci from "../fibonacci";
export default class fibonacciWorker {
constructor() {
// Note that `onmessage` should be overwritten by the code using the worker.
this.onmessage = () => { };
}
postMessage(data) {
this.onmessage({ data: fibonacci(data) });
}
}
주요 기능을 쉽게 테스트
import { shallowMount } from '@vue/test-utils'
import App from '@/App.vue'
jest.mock("@/fibonacci.worker")
describe('Fibonacci App.vue', () => {
it('should calculate Fibonacci number', async () => {
const wrapper = shallowMount(App)
await wrapper.find('input').setValue('10')
await wrapper.find('button').trigger('click')
expect(wrapper.find('.result').element.innerHTML).toBe('Result: 89')
})
})
모든 작업자가 한 번에 조롱되도록 이 솔루션을 일반화하기 위해
workerloader-jest-transformer
를 만들었습니다. 이 Jest 변환기는 Jest에서 Webpack 작업자-로더 모듈로 로드된 웹 작업자를 테스트하는 데 도움이 됩니다. 사용하기 쉽습니다.yarn add workerloader-jest-transformer --dev
변환 규칙을 Jest 구성에 추가하십시오.
transform: {
"^.+\\.worker.[t|j]sx?$": "workerloader-jest-transformer"
}
이 변환기는 jsdom-worker에서 영감을 받아 JSDOM용 Web Worker API를 구현하므로 here에서 볼 수 있듯이 모의 코드를 제거할 수 있습니다.
Workerloader-jest-transformer는 매우 실험적이며 코드는 Github에서 사용할 수 있습니다. 모든 기여와 조언은 대단히 감사하겠습니다!
Reference
이 문제에 관하여(Jest로 웹 작업자를 테스트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/astagi/how-to-test-web-workers-with-jest-2c31텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)