25

テスト jasmine テスト スイートを webpack 4 で実行できませんでした。webpack をアップグレードした後、ほぼすべてのテストで次のエラーが発生します。

Error: <spyOn> : getField is not declared writable or has no setter 

これは、単純な関数のスパイを作成するために使用する一般的なパターンが原因です。

import * as mod from 'my/module';
//...
const funcSpy = spyOn(mod, 'myFunc');

私は遊んでみましたmodule.rules[].typeが、どのオプションもうまくいかないようです。

この webpack GH の問題は、ECMA モジュールが書き込み可能ではないことを示しています。これは Web にとって意味がありますが、テストのための回避策は本当にありませんか?

関連するパッケージのバージョン:

"jasmine-core": "2.6.4",
"typescript": "2.5.3",
"webpack": "4.1.1",
"webpack-cli": "^2.0.12",
"karma": "^0.13.22",
"karma-jasmine": "^1.1.0",
"karma-webpack": "^2.0.13",
4

4 に答える 4

23

引数を にspyOnProperty設定することで、プロパティを読み取り専用として扱うことができます。accessType'get'

セットアップは次のようになります

import * as mod from 'my/module';
//...
const funcSpy = jasmine.createSpy('myFunc').and.returnValue('myMockReturnValue');
spyOnProperty(mod, 'myFunc', 'get').and.returnValue(funcSpy);
于 2019-02-19T00:29:26.407 に答える
3

彼らが同じ結論に達するこのGitHubの問題があります。不変のエクスポートが意図されていること。しかし、ユーザーlavelleには、テスト コードと本番コード用に異なる webpack 構成を作成した回避策 (このコメント内) があります。テスト構成は"commonjs"モジュールを使用しますが、ゲッターを作成しないことで機能しているようです。

于 2018-09-06T21:27:34.110 に答える