私はモジュールが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でモックする正しい方法は何でしょうか?
私は 'jest.mock'を呼び出して、インポート時と同じparamを与えなければならないと信じています。 したがって、 './services/map-creation.service'の 'import {createMap} 'を使用している場合、''jest.mock(' ./ services/map-creation.service ');'モジュールと同じディレクトリにテストを配置します(これは一般的な方法です)。 – jevgenig
別のオプションは、非相対モジュールのインポートを使用するようにTSを設定することです[リンク](https://www.typescriptlang.org/docs/handbook/module-resolution.html) インポートとモックに使用するこれらの2つのパスは同じです) – jevgenig