web-dev-qa-db-ja.com

RequireJS依存関係でes6モジュールをテストするときのJestの「定義が定義されていません」

テストしようとしているコンポーネントがRequireJSモジュールに依存しているため、実行に失敗するJestテストスイートがあります。これが私が見ているエラーです:

 FAIL  __tests__/components/MyComponent.test.js
  ● Test suite failed to run

    ReferenceError: define is not defined

      at Object.<anonymous> (node_modules/private-npm-module/utils.js:1:90)

コンポーネントには次のインポートがあります。

import utils from 'private-npm-module';

そして、private-npm-moduleは次のように設定されます。

define('utils', [], function() {
  return {};
});

MyComponentがbabelでトランスパイルされ、ブラウザーで実行されると、依存関係は正しく機能します。この問題は単体テストにのみ影響します。 RequireJS依存関係のあるコンポーネントでテストスイートを実行するにはどうすればよいですか?

Package.jsonのjest構成でscriptPreprocessorとしてbabel-jestを使用しています。 jestv0.15.1を使用しています。

13
Luke

したがって、RequireJSはJestではサポートされていません。私の特定のケースでは、MyComponent.test.jsの先頭で依存関係をモックするのが最も簡単で適切でした。

jest.mock('private-npm-module', () => {
  // mock implementation
})

import MyComponent from '../../components/MyComponent';

このように、MyComponentがロードされると、その依存関係はすでにモックされているため、RequireJSモジュールをロードしようとはしません。

テストのために本当にRequireJSモジュールをロードする必要がある場合は、 jestのtransform configuration を使用して、実装をRequireJSからES6へのコンバーターでラップすることができる場合があります。

11
Luke