Mochaではアロー関数 ()=>{} は推奨されていないが、TypeScriptを使っていれば問題ないはず
#Mocha #Node.js #アロー関数 #arrow_function #TypeScript
理由
Machaコンテキストを使う場合に正しく動かないからとのこと。
なぜ使ってほしくないかの公式による説明:
アロー関数使ってもいいかどうか?
ここは個人的な判断。
うまくいかない例として、this.timeout(1000);が上がっているが、ちゃんと()=>{}とthiisの意味がわかっていると、うまくコーディング中にうまく動作しないことが分かるから、それほど大きな問題でもない気がする。それと、TypeScriptとセットで使っていると、コンパイル時にthisの型に#timeout()がないことがわかるため、コンテキストに生えているすべてのメソッドに対しても問題なく間違いを検出できそう(TypeScriptでthisの型を指定する)。
Mochaでもthisの型は指定されていて、ちゃんとTypeScriptを使っていれば間違いに気づけるはず。
code:ts
/**
* Callback function used for tests and hooks.
*/
type Func = (this: Context, done: Done) => void;
とはいっても、function(){}と()=>{}で挙動が変わる可能性があることをちゃんと把握していることは重要。
安全に倒すためにfunction(){}に書き換えてもいいのだが、lintツールなどで、Mochaを使っている部分で()=>{}を使うとエラーさせるような仕組みを使えるようになるまで、モチベーションがわかない。
理由は、
TypeScriptだとそれほど深刻じゃないという点と
function (){}をなんで使っているか、だいぶたってソースを見たときに思い出せず「一貫してないな」と思いそう
最悪の場合はまた()=>{}に書き直したりするコミットをしてしまうかもしれない
それを防ぐにもlintツール等でCI時にエラーさせたりしたくなる
きっかけ
bouzuyaさんによるこのコメント: