4

私が最近書いた JavaScript プラグインには、プラグイン全体またはプラグインの一部に、それ自体を隠して、機能できない状況で停止するように指示する、さまざまなフェイルセーフが組み込まれています。たとえば、私たちが提供する機能の 1 つが、ユーザーがオンライン ストアで商品の上にカーソルを置いたときに、商品の競合他社の価格を示すポップオーバーを自動的に生成するとします。次に、競合他社の価格がわからない場合、またはアイテムを特定できない場合は、ポップオーバーを表示しないというチェックも行います。

おおよそ次の構造に従うテストを使用して、その機能の無効化をテストしたいと思います。

  1. 特定の機能を無効にする必要があるページにプラグインをロードする
  2. そうでなければその機能をトリガーするユーザーアクションを偽装する
  3. DOM に目に見える変更が加えられていないことをアサートします。(つまり、表示されている要素のスタイルは変更されず、要素がオンになっていない限り、要素の追加や削除は行われませんdisplay:none)

もちろん、ステップ 3 は興味深いものです。JavaScript で 'DOM を変更しない' テストを簡単に書く方法はありますか? (または、代わりに、Selenium for Python を使用してテストを記述していますが、JavaScript でチェックを記述した方が、あらゆる JavaScript テスト環境で使用できるため、おそらくより広範に役立ちます。)


PS「あなたは間違っている!」群衆:

  • はい、上記のテストのステップ 3 を、プラグインが行う特定の変更が行われていないことを確認することで置き換えることができることを知っています。しかし、これらの特定の変更の仕様が不十分で、変更される可能性がある場合、このキャッチオール アプローチが役立つ可能性があります。

  • はい、また、影響を与えないことを意図したイベントがトリガーされたときに、DOM に即時の視覚的変化がないことを確認するだけでは、何も壊れていないことを厳密に証明するには不十分であることも認識しています。しかし、それは私の現在の目的に最適です。さらに、役に立たないことがわかったとしても、面白くて楽しいです。

4

1 に答える 1

4

Mutation オブザーバーを使用して、突然変異が発生していないことを検出します。ミューテーション オブザーバー向けの非常に優れた高レベルのラッパーである Mutation Summary をチェックアウトすることをお勧めします。ミューテーションが発生していないことを確認するのは、返された配列の長さが 0 であることを確認するのと同じくらい簡単です。 https://code.google.com/p/mutation-summary/を参照してください。

于 2013-03-21T14:38:28.130 に答える