101 lines
3.0 KiB
TypeScript
101 lines
3.0 KiB
TypeScript
import type { Tree } from '@nx/devkit';
|
|
import * as devkit from '@nx/devkit';
|
|
import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
|
|
import { generateTestApplication } from '../utils/testing';
|
|
import { webWorkerGenerator } from './web-worker';
|
|
|
|
describe('webWorker generator', () => {
|
|
let tree: Tree;
|
|
const appName = 'ng-app1';
|
|
|
|
beforeEach(async () => {
|
|
tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
|
|
await generateTestApplication(tree, { name: appName });
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
it('should generate files', async () => {
|
|
await webWorkerGenerator(tree, { name: 'test-worker', project: appName });
|
|
|
|
expect(tree.exists(`${appName}/tsconfig.worker.json`));
|
|
expect(tree.exists(`${appName}/src/app/test-worker.worker.ts`));
|
|
});
|
|
|
|
it('should extend from tsconfig.base.json', async () => {
|
|
await webWorkerGenerator(tree, { name: 'test-worker', project: appName });
|
|
|
|
expect(tree.read(`${appName}/tsconfig.worker.json`, 'utf-8')).toContain(
|
|
'"extends": "../tsconfig.base.json"'
|
|
);
|
|
});
|
|
|
|
it('should extend from tsconfig.json when used instead of tsconfig.base.json', async () => {
|
|
tree.rename('tsconfig.base.json', 'tsconfig.json');
|
|
|
|
await webWorkerGenerator(tree, { name: 'test-worker', project: appName });
|
|
|
|
expect(tree.read(`${appName}/tsconfig.worker.json`, 'utf-8')).toContain(
|
|
'"extends": "../tsconfig.json"'
|
|
);
|
|
});
|
|
|
|
it('should format files', async () => {
|
|
jest.spyOn(devkit, 'formatFiles');
|
|
|
|
await webWorkerGenerator(tree, { name: 'test-worker', project: appName });
|
|
|
|
expect(devkit.formatFiles).toHaveBeenCalled();
|
|
});
|
|
|
|
it('should not format files when --skipFormat=true', async () => {
|
|
jest.spyOn(devkit, 'formatFiles');
|
|
|
|
await webWorkerGenerator(tree, {
|
|
name: 'test-worker',
|
|
project: appName,
|
|
skipFormat: true,
|
|
});
|
|
|
|
expect(devkit.formatFiles).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('should add the snippet correctly', async () => {
|
|
// ARRANGE
|
|
tree.write(`${appName}/src/app/test-worker.ts`, ``);
|
|
|
|
// ACT
|
|
await webWorkerGenerator(tree, {
|
|
name: 'test-worker',
|
|
project: appName,
|
|
snippet: true,
|
|
});
|
|
|
|
// ASSERT
|
|
expect(tree.read(`${appName}/src/app/test-worker.ts`, 'utf-8'))
|
|
.toMatchInlineSnapshot(`
|
|
"if (typeof Worker !== 'undefined') {
|
|
// Create a new
|
|
const worker = new Worker(new URL('./test-worker.worker', import.meta.url));
|
|
worker.onmessage = ({ data }) => {
|
|
console.log(\`page got message \${data}\`);
|
|
};
|
|
worker.postMessage('hello');
|
|
} else {
|
|
// Web Workers are not supported in this environment.
|
|
// You should add a fallback so that your program still executes correctly.
|
|
}
|
|
"
|
|
`);
|
|
expect(tree.read(`${appName}/src/app/test-worker.worker.ts`, 'utf-8'))
|
|
.toMatchInlineSnapshot(`
|
|
"/// <reference lib="webworker" />
|
|
|
|
addEventListener('message', ({ data }) => {
|
|
const response = \`worker response to \${data}\`;
|
|
postMessage(response);
|
|
});
|
|
"
|
|
`);
|
|
});
|
|
});
|