2016-12-14 9 views
2

ポリマー要素には、ビューポートサイズの検出やグローバル変数を挿入する解析パッケージなど、グローバルな振る舞いに依存するメソッドがいくつかあります。Webコンポーネントテスターでグローバル変数を模擬する方法

私はWeb Component Testerを使用してこれらのメソッドをテストしようとしていますが、どのようにインジェクションするのか分かりません。スタブをwindowオブジェクトに追加します(たとえば、webdriverのexecute関数で可能です)。これはどうすればいいですか?

動作しませんでしたテストの例:

test('my-element should not crash when `Analytics` is blocked', function() { 
     // I'd like window.Analytics in my app to be undefined, 
     // but this doesn't work, obviously: 
     window.Analytics = undefined; 

     myEl = fixture('my-element'); 
     expect(myEl.ready).to.not.throw(); 
    }); 
+1

例を追加できますか? – Gordon

+0

@Gordon編集、上記を参照してください。 – Vincent

答えて

0

あなたが前またはbeforeEachと後またはafterEachフック使用して試みることができます。

var tempAnalytics = window.Analytics; 
    before(function() { 
    // runs before all tests in this block 
    window.Analytics = undefined; 
    }); 

    after(function() { 
    // runs after all tests in this block 
    window.Analytics = tempAnalytics; 
    }); 

別のオプションは、プロパティをスタブにしSinon sandboxesを使用することです。

var sandbox = sinon.sandbox.create(); 
sandbox.stub(window, "Analytics", undefined); 

// then restore when finished like above 
sandbox.restore(); 
+0

しかし、それはまだ 'window'オブジェクトにあります_私のテストの中に_入っていますが、私は自分のアプリケーションで利用できるものにアクセスしたいと思っています。 Webdriverの[実行](http://webdriver.io/api/protocol/execute.html)のようなものですが、Web Component Testerのためです。 – Vincent

+0

あなたの例でもう少し情報が必要でしょうか。一般的にテストは、テストしたい機能のテストにすぎません。関数の範囲外の他の関数がある場合、それらの関数をスタブすることができます。 – Gordon

+0

こんにちはGordon、あなたのコンポーネントに何かがあるかどうか確認してください:let Analytics = window.Analytics;もしあなたがそれを持っているなら、参照を保持していることを意味し、ウィンドウリファレンスをクリーニングすることは遅すぎるでしょう。 –

関連する問題