web-dev-qa-db-ja.com

Angular単体テストでインポートされた関数をモック/スパイする方法

私がangular 6コンポーネントに何らかの値を返すメソッドtestがあるとしましょう:

_import { doSomething } from './helper';

@Component({
    ...
})
export class AppComponent {
    test() {
        const data = doSomething(1);
        return data.something ? 1: 2;
    }
}
_

doSomethingは単純なヘルパー関数です。

_export function doSomething() {
    return { something: 1 };
}
_

単体テストでこの関数をモックまたはスパイすることは可能ですか?または、コンポーネントのアプローチを変更する必要がありますか?

注意してください:doSomething()はlodash関数、const、クラスなどです。この例をできるだけシンプルにしようとしました。


私が試したもの:

  • 関数は何にも接続されていないため、SpyOnは機能しません

  • モック関数を_TestBed.configureTestingModule_のimports配列にインポートすると、_Unexpected value 'doSomething' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation._が得られます

  • サービスの作成は機能しますが、インポートされた各機能のサービスを作成する必要があるのは愚かなことです

10
user7995820

仕様ファイルでヘルパーを次の方法でインポートします。

import * as helper from './helper';

また、it()でヘルパーオブジェクトをスパイし、要求された値を返すことができます。

spyOn(helper, 'doSomething').and.returnValue({});
11
MDI