tschaub / mock-fs

Configurable mock for the fs module
https://npmjs.org/package/mock-fs
Other
906 stars 85 forks source link

mock-fs causing error with cosmiconfig #317

Open smmoosavi opened 3 years ago

smmoosavi commented 3 years ago

code:

import { cosmiconfigSync } from 'cosmiconfig';
import mockFs from 'mock-fs';

describe('getContext', () => {
  afterAll(() => {
    mockFs.restore();
  });
  it('should load context', () => {
    mockFs({
      '.my-apprc.yml': 'sample: test\n'
    });
    const explorer = cosmiconfigSync('my-app');
    const config: any = explorer.search()?.config ?? {};
  });
});

error:

    Cannot find module 'yaml' from 'node_modules/cosmiconfig/dist/loaders.js'

      at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:306:11)
      at loadYaml (node_modules/cosmiconfig/dist/loaders.js:40:12)
      at ExplorerSync.loadFileContentSync (node_modules/cosmiconfig/dist/ExplorerSync.js:84:26)
      at ExplorerSync.createCosmiconfigResultSync (node_modules/cosmiconfig/dist/ExplorerSync.js:89:30)
      at ExplorerSync.loadSearchPlaceSync (node_modules/cosmiconfig/dist/ExplorerSync.js:70:25)
nicodoggie commented 1 year ago

Just had this issue. It's because dynamic requires seem to also load from the virtual filesystem made by mock-fs, so it can't find node_modules by default. You'd have to do something along the lines of

mock({
  "node_modules": mock.load(resolve(projectRoot, 'node_modules')),
  .
  .
  .
});