Feathers: jestを使用したテストは、Windowsプラットフォームで生成されたアプリで失敗することがあります

作成日 2019年11月05日  ·  3コメント  ·  ソース: feathersjs/feathers

再現する手順

  • []何が壊れたのか教えてください。 詳細なほど良い。
    生成してアプリを作成し、何も変更しなかった後、jestテストスイートはWindowsで常に機能していません。

  • []可能であれば、問題を再現する簡単な例を作成し、要点、jsbin、リポジトリなどにリンクしてください。これにより、デバッグがはるかに簡単になり、再現可能な例がある問題の優先度が高くなります。

feathers generate app
? Do you want to use JavaScript or TypeScript? JavaScript
? Project name feathers
? Description
? What folder should the source files live in? src
? Which package manager are you using (has to be installed globally)? Yarn
? What type of API are you making? (Press <space> to select, <a> to toggle all, <i> to invert selection)REST, Realtime v
ia Socket.io
? Which testing framework do you prefer? Jest
? This app uses authentication Yes
? What authentication strategies do you want to use? (See API docs for all 180+ supported oAuth providers) Username + Pa
ssword (Local)
? What is the name of the user (entity) service? users
? What kind of service is it? NeDB
? What is the database connection string? nedb://../data

yarn jest

予想される行動

すべてのテストは常に合格しています。

実際の動作

私はいつもこれを手に入れます:

\feathers\node_modules\nedb\lib\datastore.js:77
    if (err) { throw err; }
               ^

[Error: EPERM: operation not permitted, rename 'C:\Users\stef\feathers\data\users.db~' -> 'C:\Users\stef\feathers\data\users.db'] {
  errno: -4048,
  code: 'EPERM',
  syscall: 'rename',
  path: 'C:\\Users\\stef\\feathers\\data\\users.db~',
  dest: 'C:\\Users\\stef\\feathers\\data\\users.db'
}

そして、テストに合格することもあれば、合格しないこともあります(!30000msのタイムアウトで試しましたが、同じ結果です)

    : Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Error:

      20 |     });
      21 |
    > 22 |     it('authenticates user and creates accessToken', async () => {
         |     ^
      23 |       const { user, accessToken } = await app.service('authentication').create({
      24 |         strategy: 'local',
      25 |         ...userInfo

      at new Spec (node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
      at Suite.<anonymous> (test/authentication.test.js:22:5)
      at Suite.<anonymous> (test/authentication.test.js:8:3)
      at Object.<anonymous> (test/authentication.test.js:3:1)

Test Suites: 1 failed, 2 passed, 3 total
Tests:       1 failed, 5 passed, 6 total
Snapshots:   0 total
Time:        25.515s

システム構成

NodeJSバージョン
v12.13.0

オペレーティングシステム
ウィンドウズ10

最も参考になるコメント

Ubuntuでいくつかのテストを実行したところ、同じ種類のランダムな問題に気づきました。
犯人を見つけたと思います。 ファイルを使用しているのはおそらくNeDBでしょう。 そして、現在構成されているので、jestはテストを並行して実行し、ランダムな競合を引き起こします。
--runInBandオプションを指定してjestを実行すると、これ以上問題は発生しません。
この問題は解決できます。

全てのコメント3件

Ubuntuでいくつかのテストを実行したところ、同じ種類のランダムな問題に気づきました。
犯人を見つけたと思います。 ファイルを使用しているのはおそらくNeDBでしょう。 そして、現在構成されているので、jestはテストを並行して実行し、ランダムな競合を引き起こします。
--runInBandオプションを指定してjestを実行すると、これ以上問題は発生しません。
この問題は解決できます。

@dafflこの問題は、さらに調査するために再度開く必要があると思います。

--runInBandオプションを試しましたが、同じ問題が発生します。

[Error: ENOENT: no such file or directory, rename '/home/sullivan/p/gitlab.com/project/api/test/data/rides.db~' -> '/home/sullivan/p/gitlab.com/project/api/test/data/rides.db'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'rename',
  path: '/home/sullivan/p/gitlab.com/data/api/test/data/rides.db~',
  dest: '/home/sullivan/p/gitlab.com/data/api/test/data/rides.db'
}

役立つ追加情報を追加したいのですが、デバッグしたいものについていくつかの手がかりが必要になります。 :+1:

JestをGitHubActionランナーで使用する場合にも、同様の問題が発生します。 テストは、macOSを搭載したローカルマシンで正常に実行されます。 テストを更新して、(a)インメモリデータベースを使用するか、(b)テストごとに動的ファイル名を使用する必要があると思われます。 私はFathersエコシステムに慣れていないので、どちらを実装するのかわかりません。

少なくとも、Jestの限定的なサポートをより適切に反映するように、ドキュメントが更新されていれば素晴らしいと思います。 チュートリアル、またはモカの選択を提案するウィザードがあったことを覚えています。 しかし、私はJestの経験が豊富なので、一緒に行きました。 ドキュメントがトレードオフをよりよく説明していれば、私は別の決定を下したでしょう。

更新1: https://burnedikt.com/feathers-and-nedb-for-testing/の手順に従って、インメモリデータベースを使用するようにテストを更新しました。

更新2:Feathers CLIは、 connectionStringが単一の文字列(パスなど)であると想定します。 NeDBがサポートするサービスでサービスジェネレータを使用するには、 config/default.jsonに加えた変更を元に戻して、 nedbが文字列になるようにする必要があります。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

corymsmith picture corymsmith  ·  4コメント

arve0 picture arve0  ·  4コメント

arkenstan picture arkenstan  ·  3コメント

perminder-klair picture perminder-klair  ·  3コメント

rrubio picture rrubio  ·  4コメント