Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/wojtekmaj/vitest-react-native. Run React Native unit and component tests with Vitest
Something went wrong. Try again.
3.1 kB · 94 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';import { tmpdir } from 'node:os';import { join } from 'node:path';import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import { getExtensions, resolveFile } from './resolve.js';
let directory: string;
beforeEach(() => { directory = mkdtempSync(join(tmpdir(), 'native-resolution-'));});
afterEach(() => { rmSync(directory, { force: true, recursive: true });});
describe('resolveFile()', () => { it('should resolve an ordinary file', () => { writeFileSync(join(directory, 'component.js'), '');
expect(resolveFile(join(directory, 'component'), getExtensions('ios'))).toBe( join(directory, 'component.js'), ); });
it.each` platform | expected ${'ios'} | ${'component.ios.tsx'} ${'android'} | ${'component.android.tsx'} `('should prefer $platform sources over native and generic sources', ({ platform, expected }) => { for (const filename of [ 'component.tsx', 'component.native.tsx', 'component.ios.tsx', 'component.android.tsx', ]) { writeFileSync(join(directory, filename), ''); }
const result = resolveFile(join(directory, 'component'), getExtensions(platform));
expect(result).toBe(join(directory, expected)); });
it('should fall back to a native file', () => { writeFileSync(join(directory, 'component.native.js'), ''); writeFileSync(join(directory, 'component.js'), '');
expect(resolveFile(join(directory, 'component'), getExtensions('ios'))).toBe( join(directory, 'component.native.js'), ); });
it('should fall back to a generic file from another platform', () => { writeFileSync(join(directory, 'component.android.js'), ''); writeFileSync(join(directory, 'component.js'), '');
expect(resolveFile(join(directory, 'component'), getExtensions('ios'))).toBe( join(directory, 'component.js'), ); });
it('should prefer JavaScript over a platform-specific TypeScript file', () => { writeFileSync(join(directory, 'component.js'), ''); writeFileSync(join(directory, 'component.ios.ts'), '');
expect(resolveFile(join(directory, 'component'), getExtensions('ios'))).toBe( join(directory, 'component.js'), ); });
it('should prefer native JSX over platform-specific TypeScript', () => { writeFileSync(join(directory, 'component.native.jsx'), ''); writeFileSync(join(directory, 'component.ios.tsx'), '');
expect(resolveFile(join(directory, 'component'), getExtensions('ios'))).toBe( join(directory, 'component.native.jsx'), ); });
it('should resolve a native directory entry', () => { mkdirSync(join(directory, 'component')); writeFileSync(join(directory, 'component/index.native.ts'), '');
const result = resolveFile(join(directory, 'component'), getExtensions('ios'));
expect(result).toBe(join(directory, 'component/index.native.ts')); });
it('should return undefined for an unresolved file', () => { expect(resolveFile(join(directory, 'missing'), getExtensions('ios'))).toBeUndefined(); });});