[TypeScript] export default したclassを require できなくてハマった話
この記事は最終更新日から5年以上が経過しています。
TL;DR
- jest で mock かけるために、
import
ではなくrequire
する必要があった - new できなくて困った
const MyClass = require("./MyClass").default
にする必要があった
実例
// ./MyClass.ts
class MyClass {
constructor(){
console.log("aaaaaa");
}
async data(): Promise<string> {
return Promise.resolve("some string")
}
}
export default MyClass
// ./MyClass.test.ts
test('basic', async () => {
// なんらかの mock 処理
const MyClass = require('./MyClass');
const myClass = new MyClass();
const data = await myClass.data();
expect(data).toBe("some string");
});
import
で読み込めばいいが、jest で mock かけるために、import
が使えなかったので require
する必要があった
失敗した例。MyClass が constractor ではないというエラーが出る
// ./MyClass.test.ts
test('basic', async () => {
// なんらかの mock 処理
- const MyClass = require('./MyClass');
+ const MyClass = require('./MyClass').default;
const myClass = new MyClass();
const data = await myClass.data();
expect(data).toBe("some string");
});
こうすればできた。
雑感
- default が 本当にdefaultとして解釈される場合と、defaultを指定しないといけない場合がある。TypeScript のこの辺の挙動は難しいね。
- クソザコなので export/import があんまり理解できてない。
[TypeScript] export default したclassを require できなくてハマった話