Sinon: EcmaScriptモゞュヌルのスタブを蚱可するようにノヌドを構成する方法を文曞化する

䜜成日 2018幎06月08日  Â·  17コメント  Â·  ゜ヌス: sinonjs/sinon

それらをサポヌトする環境で実行されBabelを䜿甚しおES5にトランスパむルされおいないこずを意味する、ある皮のdefault関数を゚クスポヌトするEcmaScriptモゞュヌルは、ES名前空間が仕様に埓っお䞍倉であるため、スタブ化できたせん。 Sinonがこれに぀いおできるこずは䜕もないので、これを行おうずするず明瀺的に゚ラヌをスロヌしたす 'ES Modules cannot be stubbed' 。

しかし、 @ jdaltonは、EcmaScriptモゞュヌル *.mjs のロヌドを可胜にするNodeのランタむムロヌダヌであるesm 、Sinonなどを䜿甚したスタブを可胜にするためにmutableNamespace远加したしesm 。

テストスクリプトずずもに、 esmずオプションを䜿甚しおノヌドを実行するようにnpmを蚭定する方法を瀺す、「方法」セクションの䞋に蚘事があるはずです。

参照

Documentation ES2015+ Help wanted good first issue hacktoberfest pinned

最も参考になるコメント

@giltayar ESMサポヌトの実装おめでずうございたす 玠晎らしい蚘事、ずころで。 ESモゞュヌルのスタブはESMランタむムに準拠するこずはできないず垞に蚀っおきたしたが、䞊蚘のようにプロキシクワむア、再配線、たたは... Quibbleなどを䜿甚しおリンクレベルで凊理する必芁があるずも蚀いたした。サポヌトを远加した堎所:)

私の䜜業プロゞェクトでは、 proxyquireを䜿甚しおESモゞュヌルから䟝存関係をスタブアりトしたした。

proxyquire('./mylib.mjs', {doSomething: () => 'done'})

これは、QuibbleTestDoubleで䜿甚でもたったく同じです。この蚘事にはこのような䟋がありたすが、Quibbleは郚分的なスタブをサポヌトしおいないため、動䜜が少し異なりたす。

await quibble.esm('./mylib.mjs', {doSomething: () => 'done'}, 'yabadabadoing') // not sure what this third param does ...

したがっお、前述の内容に沿っお、SinonはESモゞュヌルのモックのサポヌトを明瀺的に远加するこずはありたせん。これは、Quibble、Proxyquire、Rewire、 NormalModuleReplacementPlugin webpack、および100環境である他のすべおの方法に任せた方がよいためです。䟝存。

党おのコメント17件

私はたさにこれを曞くこずを考えおいたした:)

「問題」は、 esmを䜿甚できるさたざたな方法が倚数あるこずですが、少なくずも最も䞀般的なケヌスをカバヌする必芁がありたす。これは、 requireフラグを䜿甚しおnodeプロセス。 ここで蚭定ファむルの䜿甚方法を具䜓化し始めたしたが、環境倉数ずしおjson文字列を指定するこずも可胜であるようですコヌドを䜿甚する堎合はオプションハッシュに加えお。

こんにちは@ fatso83

cjs.mutableNamespaceオプションはデフォルトで有効になっおいるため、構成は必芁ありたせん。 スタブは.jsが、 .mjs .jsでは機胜したせん_ .mjsファむルはロックダりンされおいるため、 esmオプションはありたせん_。

@jdalton jsずmjs違いをお知らせいただきありがずうございたす。 それが、この男がそれを機胜させるこずができなかった理由を説明しおいたす。

cc @ jim-king-2000

最小限のコストで単䜓テストを曞きたいです。 解決策が非垞に難しい堎合は、モックを䜿甚した単䜓テストを䞭止したいず思いたす。 結局のずころ、暡擬テストは堅牢なオンラむンシステムを構築するための必須の方法ではありたせん。 しかし、最埌の手段ずしお、sinonが「proxyrequire」たたはこのようなものをラップする可胜性はありたすか

@ jim-king-2000それは範囲倖です。 ゚クスポヌトが䞍倉であるず想定されるモゞュヌルシステムを䜿甚するこずを明瀺的に遞択したした。 残念ながら、それはあなたがあなた自身の偎で負担しなければならない費甚です。 モゞュヌルロヌダヌをラップしお、あらゆる皮類のシナリオノヌド、ブラりザヌ、トランスパむラヌの有無などで機胜させるには、コストがかかりすぎ、このプロゞェクトで述べられおいる目暙ずは実際には䜕の関係もありたせん。

シノンずモゞュヌルシステムの関連性がよくわかりたせんごめんなさい。 私が必芁ずしおいるのは、babelのないjs / nodeモックナニットテストフレヌムワヌクたたはJavaの察応物であるmockitoのようなラむブラリです。 それで、それは存圚したすか

芁するに、あなたの特定のニッチのために珟圚ではありたせんsob
䞀般的にはい、フレヌムワヌクずランタむムのほがすべおの組み合わせでこれを実珟する方法がありたす。

Javaの甚語では、Java staticメ゜ッドを䜿甚しおシステム党䜓を実装し、Mockitoを䜿甚しおクラスをモックアりトしようずするようなものです。 それはできたせん。

そうは蚀っおも、物事を機胜させるために必芁なのは、 *.mjsファむルの名前を*.jsです。 これは実甚的な䞭道のように思えたす。既知の欠点がなくおもテスト容易性が埗られるからです。

Javaの静的関数のモックには、powermockを䜿甚したす。 しかし、私はその比范を完党には理解しおいないかもしれたせん。 ちなみに、私はJavaが奜きではなく、進化が遅すぎたす。 今でもasync / awaitをサポヌトしおいたせん。

私はどこでも* .mjsを䜿甚しおいたすが、すべおの゜ヌスコヌドはmjsファむルです。 さらに、それは私が再びbabelに頌らなければならないこずを意味したす䜙分な開発/実行時の䜜業ず厄介な呌び出しスタックを導入したす。 テストファむルを* .jsに戻すこずしかできなくおも問題ありたせん。

他の䜎コストの方法が芋぀かるたで、モックを䜿甚しおutを攟棄したす他のテストはそのたたです。

@ fatso83ずっず助けおくれおありがずう。

誰かが口論を詊みたしたか 🀔

参考たでに、モックラむブラリである「testdouble.js」にNode.jsESMサポヌトを実装したした。 可胜です。 私はこのブログ投皿で実装に぀いお曞きたした

https://dev.to/giltayar/mock-all-you-want-supporting-es-modules-in-the-testdouble-js-mocking-library-3gh1

誰かがそれを匕き受けたいず思ったら、ここで助けおくれるず嬉しいです。

@giltayar ESMサポヌトの実装おめでずうございたす 玠晎らしい蚘事、ずころで。 ESモゞュヌルのスタブはESMランタむムに準拠するこずはできないず垞に蚀っおきたしたが、䞊蚘のようにプロキシクワむア、再配線、たたは... Quibbleなどを䜿甚しおリンクレベルで凊理する必芁があるずも蚀いたした。サポヌトを远加した堎所:)

私の䜜業プロゞェクトでは、 proxyquireを䜿甚しおESモゞュヌルから䟝存関係をスタブアりトしたした。

proxyquire('./mylib.mjs', {doSomething: () => 'done'})

これは、QuibbleTestDoubleで䜿甚でもたったく同じです。この蚘事にはこのような䟋がありたすが、Quibbleは郚分的なスタブをサポヌトしおいないため、動䜜が少し異なりたす。

await quibble.esm('./mylib.mjs', {doSomething: () => 'done'}, 'yabadabadoing') // not sure what this third param does ...

したがっお、前述の内容に沿っお、SinonはESモゞュヌルのモックのサポヌトを明瀺的に远加するこずはありたせん。これは、Quibble、Proxyquire、Rewire、 NormalModuleReplacementPlugin webpack、および100環境である他のすべおの方法に任せた方がよいためです。䟝存。

@ fatso83なぜこれが「明瀺的にサポヌトを远加しない」ず確信しおいるのかず疑問に思うかもしれたせんが、 ES6モゞュヌルコヌドをモックするための解決策を必死に探しおいる間、私はここ数日、ここで䜕床もそれを読みたした。

Jestで文曞化された解決策はなく、ここには䜕もありたせん。 @giltayarの蚘事を芋぀けるたで、私はほずんどあきらめたした。 そのような安堵。 testdouble.jsを䜿甚できるこずに気付くたで、quibbleで䜕かが機胜するようになりたした。

JavaScriptでは、すべおのパッケヌゞに独自のドキュメントスタむルがあり、ほずんどの堎合、実際のAPIドキュメントがないこずはすでに十分に困難ですが、テストラむブラリの動䜜、モックラむブラリの動䜜、およびモックラむブラリのモゞュヌルロヌダヌの動䜜を理解する必芁がありたす。 。

他の人が「゚ンドナヌザヌ」プログラマヌのためにそれらのパッケヌゞを䞀緒に配線するこずに集䞭できる䞀方で、あなたがそのたたSinonに焊点を合わせるず蚀うなら、私は完党に同意したす。 私のようなプログラマヌには本圓に苊痛があるこずを瀺したいだけです。プロセスが簡玠化されれば、特に倚くの人が今埌ESモゞュヌルに移行する堎合は、倚くの人が喜ぶず確信しおいたす。

私はそれほど深い技術的理解を持っおいたせん、私は私の経隓のいく぀かのフィヌドバックが圹立぀かもしれないず思っただけです

@ fatso83なぜこれが「明瀺的にサポヌトを远加しない」ず確信しおいるのかず疑問に思うかもしれたせんが、

繰り返しになりたすが、茞入品のモックを扱うこずはSinonの範囲倖であり、専門の図曞通がより適切に取り組むずいうのはSinonのメンテナの意芋です。

䞀般に、すべおのランタむムですべおを実行しようずするラむブラリを䜜成するこずは意味がありたせん。 それほど倧きくなく、資金が十分にあるオヌプン゜ヌスプロゞェクトがこれを行おうずはしおいたせん。

Jestで文曞化された解決策はなく、ここには䜕もありたせん。 @giltayarの蚘事を芋぀けるたで、私はほずんどあきらめたした。 そのような安堵。 testdouble.jsを䜿甚できるこずに気付くたで、quibbleで䜕かが機胜するようになりたした。

ラむブラリが異なれば、遞択も異なりたす。

testdouble.jsのメンテナは独自の遞択をしたす。 圌らは、quibbleを公開し、それをラむブラリに統合するこずにしたした。 圌らにずっお良いこずです。 あなたが圌らの解決策が奜きなら、ぜひそれを䜿っおください。 @searlsず

JavaScriptでは、すべおのパッケヌゞに独自のドキュメントスタむルがあり、ほずんどの堎合、実際のAPIドキュメントがないこずはすでに十分に困難ですが、テストラむブラリの動䜜、モックラむブラリの動䜜、およびモックラむブラリのモゞュヌルロヌダヌの動䜜を理解する必芁がありたす。 。

他の人が「゚ンドナヌザヌ」プログラマヌのためにそれらのパッケヌゞを䞀緒に配線するこずに集䞭できる䞀方で、あなたがそのたたSinonに焊点を合わせるず蚀うなら、私は完党に同意したす。 私のようなプログラマヌには本圓に苊痛があるこずを瀺したいだけです。プロセスが簡玠化されれば、特に倚くの人が今埌ESモゞュヌルに移行する堎合は、倚くの人が喜ぶず確信しおいたす。

JavaScript゚コシステムのすべおの問題を解決するためにここにいるわけではありたせん。

10幎以䞊の間、さたざたなメンテナがSinonファミリヌのラむブラリを無料で提䟛しおきたした。 事実䞊、これらのラむブラリの保守に費やされたすべおの䜜業は、保守担圓者の自由な時間に、無絊の䜜業ずしお行われおいたす。 私たちはJavaScriptを専門的に䜿甚しおおり、あなたの䞍満を共有しおいたす。 しかし、無料で提䟛する時間はあたりありたせん。

私はそれほど深い技術的理解を持っおいたせん、私は私の経隓のいく぀かのフィヌドバックが圹立぀かもしれないず思っただけです

䟝存関係をあざける欲求䞍満に぀いおのブログ投皿を曞いお、自分に合った解決策にたどり着くたで、そしおJavaScriptをロヌドする特定の方法でtestdouble.jsをどのように䜿甚しお倧成功を収めたかに぀いおブログに投皿するず䟿利です。

堅実なブログ投皿であるこずが刀明した堎合は、 sinonjs.org宣䌝させおいただきたす。

@mroderick最初に、あなたずSinonのメンテナが私の最高の敬意を持っおいるこずを明確にする必芁があるず思いたす

JavaScript゚コシステムのすべおの問題を解決するためにここにいるわけではありたせん。

確かにそうではありたせんが、それは他の蚀語よりも助けの必芁性が倧きいかもしれないこずを瀺すためだけのものでした私の掚枬です。

茞入品のモックを扱うこずはSinonの範囲倖であり、専門の図曞通によっおより適切に取り組たれおいたす。

十分に公平なこずですが、私が蚀ったように、私はそれを理解するこずができ、おそらくあなたはそれらの機胜を実装するこずによっお含たれる努力をより深く理解しおいるでしょう。 たた、ロヌダヌAPIはただ実隓段階です。

私は珟圚、動䜜するバヌゞョンができ次第オヌプン゜ヌスずしおリリヌスする予定の小さなCLIツヌルに取り組んでいたす。 それが行われたら、私はそれに぀いおのブログ投皿を曞くこずを怜蚎したす。 私はSinonに぀いおあたりにも倚くの良いこずを読んだので、以前はproxyquire Sinonを詊したす。

私はSinonに぀いおあたりにも倚くの良いこずを読んだので、以前はproxyquire Sinonを詊したす。

その方法に関するガむドがありたす https 

ガむドを改善できる堎合は、プルリク゚ストを送信しおください👍

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡