rerumaccusamus
Version:
The meta-framework suite designed from scratch for frontend-focused modern web development.
64 lines (54 loc) • 1.69 kB
text/typescript
import * as path from 'path';
import { fs, wait } from '@modern-js/utils';
import { initWatcher } from '../src/initWatcher';
jest.useRealTimers();
const mockAppDirectory = path.join(__dirname, './fixtures/index-test');
const mockConfigDir = './config';
const mockSrcDirectory = path.join(mockAppDirectory, './src');
describe('initWatcher', () => {
afterAll(() => {
const file = path.join(mockSrcDirectory, './index.ts');
if (fs.existsSync(file)) {
fs.unlinkSync(file);
}
});
test('will trigger add event', async () => {
let triggeredType = '';
let triggeredFile = '';
const loaded = {
filePath: '',
dependencies: [],
};
const hooksRunner = {
watchFiles: async () => [mockSrcDirectory],
fileChange: jest.fn(({ filename, eventType }) => {
triggeredType = eventType;
triggeredFile = filename;
}),
};
if (await fs.pathExists(mockSrcDirectory)) {
await fs.remove(mockSrcDirectory);
}
const watcher = await initWatcher(
loaded as any,
mockAppDirectory,
mockConfigDir,
hooksRunner as any,
['dev'],
);
await wait(100);
const file = path.join(mockSrcDirectory, './index.ts');
await fs.outputFile(file, '');
await wait(100);
// expect(hooksRunner.fileChange).toBeCalledTimes(1);
// expect(triggeredType).toBe('add');
expect(file.includes(triggeredFile)).toBeTruthy();
await wait(100);
await fs.remove(file);
await wait(200);
expect(hooksRunner.fileChange).toBeCalledTimes(2);
expect(triggeredType).toBe('unlink');
expect(file.includes(triggeredFile)).toBeTruthy();
watcher?.close();
});
});