[]何が壊れたのか教えてください。 詳細なほど良い。
生成してアプリを作成し、何も変更しなかった後、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を実行すると、これ以上問題は発生しません。
この問題は解決できます。
@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
が文字列になるようにする必要があります。
最も参考になるコメント
Ubuntuでいくつかのテストを実行したところ、同じ種類のランダムな問題に気づきました。
犯人を見つけたと思います。 ファイルを使用しているのはおそらくNeDBでしょう。 そして、現在構成されているので、jestはテストを並行して実行し、ランダムな競合を引き起こします。
--runInBandオプションを指定してjestを実行すると、これ以上問題は発生しません。
この問題は解決できます。