জেস্টে গ্লোবালগুলি উপহাস করার কয়েকটি উপায় রয়েছে:
mockImplementation
পদ্ধতির ব্যবহার করুন (বেশিরভাগ উপাখ্যানের মতো), তবে এটি কেবলমাত্র সেই চলকগুলির জন্যই কাজ করবে যার কয়েকটি ডিফল্ট বাস্তবায়ন সরবরাহ করেছে jsdom
, এর window.open
মধ্যে একটি:
test('it works', () => {
const mockedOpen = jest.fn();
const originalWindow = { ...window };
const windowSpy = jest.spyOn(global, "window", "get");
windowSpy.mockImplementation(() => ({
...originalWindow,
open: mockedOpen
}));
statementService.openStatementsReport(111)
expect(mockedOpen).toBeCalled();
windowSpy.mockRestore();
});
- সরাসরি বিশ্বব্যাপী সম্পত্তিতে সরাসরি বরাদ্দ করুন তবে কিছু
window
ভেরিয়েবলের জন্য ত্রুটি বার্তাগুলি ট্রিগার করতে পারে যেমন window.href
।
test('it works', () => {
const mockedOpen = jest.fn();
const originalOpen = window.open;
window.open = mockedOpen;
statementService.openStatementsReport(111)
expect(mockedOpen).toBeCalled();
window.open = originalOpen;
});
- গ্লোবালগুলি সরাসরি ব্যবহার করবেন না (কিছুটা রিফ্যাক্টরিং প্রয়োজন)
সরাসরি বিশ্বব্যাপী মানটি ব্যবহার করার পরিবর্তে এটি অন্য ফাইল থেকে আমদানি করা আরও পরিষ্কার হতে পারে, তাই মশকরা জাস্টের সাথে তুচ্ছ হয়ে উঠবে।
./test.js
jest.mock('./fileWithGlobalValueExported.js');
import { windowOpen } from './fileWithGlobalValueExported.js';
import { statementService } from './testedFile.js';
test('it works', () => {
statementService.openStatementsReport(111)
expect(windowOpen).toBeCalled();
});
./fileWithGlobalValueExporter.js
export const windowOpen = window.open;
./testedFile.js
import { windowOpen } from './fileWithGlobalValueExported.js';
export const statementService = {
openStatementsReport(contactIds) {
windowOpen(`a_url_${contactIds}`);
}
}