1import { vol } from 'memfs'; 2 3import { createTemporaryProjectFile } from '../dotExpo'; 4 5beforeEach(() => { 6 vol.reset(); 7}); 8 9describe(createTemporaryProjectFile, () => { 10 it(`creates persisted file`, async () => { 11 const projectRoot = '/'; 12 13 const creator = createTemporaryProjectFile<{ foo: string; baz?: boolean }>('foo.json', { 14 foo: 'bar', 15 }); 16 17 // Ensure instantiation doesn't have side-effects. 18 expect(vol.toJSON()).toEqual({}); 19 20 // This has side-effects that ensure the directory. 21 const file = creator.getFile(projectRoot); 22 23 // README is bootstrapped. 24 expect(vol.readFileSync('/.expo/README.md', 'utf8')).toMatch(/Why do I have a folder named/); 25 26 // File is not automatically written... 27 await expect(file.getAsync('foo', null)).rejects.toThrowError(/ENOENT/); 28 29 // Matches defaults and doesn't fail when the file doesn't exist. 30 expect(await creator.readAsync(projectRoot)).toEqual({ foo: 'bar' }); 31 32 // Modify the file. 33 await creator.setAsync(projectRoot, { foo: 'baz', baz: true }); 34 35 // Persisted changes are reflected in the file. 36 expect(await creator.readAsync(projectRoot)).toEqual({ foo: 'baz', baz: true }); 37 }); 38}); 39