6

数日前に CasperJS を使い始めました。

今日、LocalStorage がどのように動作するかをテストするスクリプトを作成し、それを無効にできるかどうかをテストします。これは、テストが相互に影響を与えないようにするために必要だからです。

バックグラウンド

最初のページで値を要求するバックボーン ウィザードに取り組んでいます。[続行] ボタンをクリックすると、値が LocalStorage に保存され、2 ページ目に表示されます。

casperjs test <script.js>ありとなしの両方を使用してい--local-storage-quota=0ます。

最初の試み

次の処理を行う CasperJS スクリプトを作成しました。

  1. ページを読み込む
  2. モデルの内容を確認します(空であるべきです)
  3. [続行] をクリックします
  4. ページ 2 の読み込み後にモデルの内容を確認します (必要に応じて値が含まれています)。
  5. casper.thenOpen() を使用してページ 2 を新しいページとして直接開きます
  6. ページ 2 の読み込み後にモデルの内容を確認する

LocalStorage が有効になっている場合、ステップ 6 はステップ 4 と同じ結果になるはずです (モデルに値が存在します)。

LocalStorage が無効になっている場合、ステップ 6 はステップ 2 と同じ結果になるはずです (モデルは空です)。

スクリプトを実行するたびに、LocalStorage が有効になっていることがわかりました。「--local-storage-quota=0」パラメーターは違いはありませんでした。

2 回目の試行

その時点で、LocalStorage が特定の Casper インスタンスに接続されているかどうかを判断することにしました。もしそうなら、テストごとに新しい Casper インスタンスを作成することでこれを回避し、白紙の状態から始めることができます。

var Casper = require( 'casper' );

casper = Casper.create();
casper.test.begin( 'test for Local Storage, part 1', 0, function suite (test) { ... });

casper = Casper.create();
casper.test.begin( 'test for Local Storage, part 2', 0, function suite (test) { ... });

ただし、2 番目のテスト スイートは実行されません。Casper が同じスクリプトで複数のインスタンスを作成することを意図していなかったのか、それとも単に構成が間違っているだけなのかはわかりません。

補遺

関連する場合に備えて、すべてのテストスイートは次の手順で終了することを追加する必要があります。

casper.run( function () {
    test.done();
    casper.exit();
});

ドキュメントでは、 test.done() が必要であることのみを指定しています。ただし、テスト スクリプトは、casper.exit() への呼び出しを追加するまで永久にハングします。

4

1 に答える 1

1

phantomjs で localStorage または sessionStorage を無効にすることはできません。ただし、テストを実行するたびに実行環境をクリーンアップすることをお勧めします。次のような完全なセットアップで一般的なテスト機能を追加することをお勧めします。

function beginTest(casper, description, num, tests){
    function clearStorage(){
        casper.evaluate(function() {
            localStorage.clear();
            sessionStorage.clear();
        });
    }
    // Select between two possible signatures and queue a casper test
    if (typeof num == "number" && typeof tests == "function") {
        casper.test.begin(description, num, function suite(test){
            phantom.clearCookies();
            casper.start(config.baseurl, clearStorage);
            tests(test);
            casper.run(function(){
                test.done();
            });
        });
    } else if (typeof num == "function" && !tests) {
        casper.test.begin(description, function suite(test){
            phantom.clearCookies();
            casper.start(config.baseurl, clearStorage);
            num(test);
            casper.run(function(){
                test.done();
            });
        });
    }
}

次に、これを呼び出すことができます

beginTest(casper, 'test for Local Storage, part 1', 0, function suite(test){ /* ... */ });
beginTest(casper, 'test for Local Storage, part 2', 0, function suite(test){ /* ... */ 
于 2014-06-09T17:12:52.637 に答える