0

jasmine-maven-pluginでHTML5sessionStorageを使用するJavaScript関数をテストしようとしています。JasmineはHtmlUnitを使用してWebブラウザをエミュレートします。

問題は、Mavenビルド中に自動テストが実行されている場合、次のように表示されることです。

  • エラー:スパイが必要ですが、関数を取得しました。

私はこれをFFでローカルにsessionStorageを処理する方法(テスト用)を試しましたが、次のエラーが発生しました:

  • TypeError:タイプobjectの引数が必要ですが、代わりにファイルにタイプobjectがあります:..。

しかし、jasmine.jsをインポートするWebページでJasmineを実行しようとすると、テストは完全に機能します。私もこれを試しましたが、 HTMLUnitを使用してHTML5ストレージにアクセスできますが、成功しません。

jasmine-maven-pluginではなくhttp://tryjasmine.com/で機能するコードの例:

function alertItem(id) {
console.log("start");
var x = sessionStorage.getItem(id);
alert(x);
}

describe("sessionStorage test", function () {    
console = {
    log : function() {},
    error : function() {},
    warn : function() {}
};

var mockup = function() {
    var table = {};
    return {
        getItem: function(key) {
            return table[key];
        },
        setItem: function(key, value) {
            table[key] = value.toString();
        },
        removeItem: function(key) {
            table.pop();
        },      
        clear: function() {
            table = {};
        }
    };
}();

Object.defineProperty(window, 'sessionStorage', {
    value: mockup
});


it("must work", function () {
    console.log("testing...");
    spyOn(sessionStorage, 'getItem').andReturn("my value");
    alertItem("id");
    expect(sessionStorage.getItem).toHaveBeenCalled();
});
});

誰かアイデアがありますか?

ありがとう。

4

2 に答える 2

2

HTMLUnit は多くの HTML5 機能をサポートしていません。ブラウザはサポートしていますが、ブラウザでは動作しますが、HTMLUnit を使用したビルドの一部としては動作しないのはこのためです。

于 2012-10-29T14:45:21.573 に答える
0

@Kyle が示唆したように、HtmlUnit の代わりに PhantomJS を使用して jasmine-maven-plugin で sessionStorage を使用するとうまくいきました!

詳細: http://searls.github.io/jasmine-maven-plugin/phantomjs.html

ありがとうございました!

于 2014-01-10T19:12:15.120 に答える