2017-04-18 5 views
1

私はモジュールがmap-creation.service.tsと呼ば持っています:私のエンドポイントで使用されているJestを使用して、どのようにインポートされた関数をTypeScriptでモックできますか?

export const createMap = (asyncJobId: string, resourceUrl: string, s3DestFolder: string) => { 

}; 

import {createMap} from './services/map-creation.service'; 

const router = express.Router(); 
const routePrefix = config.get('server.routePrefix'); 

router.post(`/${routePrefix}`, validate(validation), (req: express.Request, res: express.Response) => { 
    createMap(req.body.asyncJobId, req.body.resourceUrl, req.body.s3DestFolder); 
    res.status(201).json({message: 'Created'}); 
}); 

私は私のテストでは、このモジュールを模擬し、それがあったかどうかをテストしたいしようとしていますExpected mock function to have been called with: ... But it was not called.

jest.mock('../../../src/services/map-creation.service'); 
import {createMap} from '../../../src/services/map-creation.service'; 

そしてここでは、私のテストです:

0123エンドポイントを要求するとき、私はまだ取得と呼ばれます
it('should call the map-creation service',() => { 
     return request(server) 
      .post(`/${routePrefix}`) 
      .send({ 
       asyncJobId, 
       resourceUrl, 
       s3DestFolder 
      }) 
      .then(res => { 
       expect(createMap).toBeCalledWith(asyncJobId, resourceUrl, s3DestFolder); 
      }); 
    }); 

私はこのような方法をからかっていた場合:

import {createMap} from '../../../src/services/map-creation.service'; 
createMap = jest.fn(); 

テストはパスするが、tslintが不平を言っている:Cannot assign to 'createMap' because it is not a variableを。では、このメソッドをTypeScriptとJestでモックする正しい方法は何でしょうか?

+0

私は 'jest.mock'を呼び出して、インポート時と同じparamを与えなければならないと信じています。 したがって、 './services/map-creation.service'の 'import {createMap} 'を使用している場合、''jest.mock(' ./ services/map-creation.service ');'モジュールと同じディレクトリにテストを配置します(これは一般的な方法です)。 – jevgenig

+0

別のオプションは、非相対モジュールのインポートを使用するようにTSを設定することです[リンク](https://www.typescriptlang.org/docs/handbook/module-resolution.html) インポートとモックに使用するこれらの2つのパスは同じです) – jevgenig

答えて

2

したがって、このメソッドをTypeScriptとJestでモックする正しい方法はありますか?

依存関係注入を使用して、モックと実際のバージョンの関数を必要に応じて注入します。

DIのための推奨フレームワーク:http://inversify.io/

しかしtslintが不平を言っている:それはこれを実行しないでください

変数ではないので、 'createMap' に割り当てることはできません。輸入は不変であるとみなすべきである。コンパイル時にTypeScriptエラーが発生し、モジュールサポートがネイティブになるとランタイムエラーが発生します。

関連する問題