HtmlUnit和jasmine-maven-plugin是否支持HTML5 sessionStorage?

时间:2012-07-03 16:45:21

标签: javascript html5 unit-testing htmlunit jasmine-maven-plugin

我正在尝试在jasmine-maven-plugin上测试使用HTML5 sessionStorage的JavaScript函数。 Jasmine使用HtmlUnit来模拟Web浏览器。

问题是当自动化测试在maven构建期间运行时,它会说:

  
      
  • 错误:期待间谍,但得到了功能。
  •   

我试过这个How to deal with sessionStorage locally in FF (for testing),然后我遇到了这个错误:

  
      
  • TypeError:类型为object的预期参数,但在文件中有类型对象:...
  •   

但是如果我尝试在导入jasmine.js的网页上运行Jasmine,那么测试效果很好。 我也试过Can I access HTML5 storages using HTMLUnit,但没有成功。

适用于http://tryjasmine.com/而非jasmine-maven-plugin的代码示例:

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();
});
});

有没有人有想法?

感谢。

2 个答案:

答案 0 :(得分:2)

HTMLUnit不支持许多HTML5功能 - 当您的浏览器支持时,这就是它在浏览器中工作的原因,但不是HTMLUnit构建的一部分。

答案 1 :(得分:0)

正如@Kyle建议的那样,使用带有PhantomJS而不是HtmlUnit的jasmine-maven-plugin上的sessionStorage工作了!

有关详情,请访问:http://searls.github.io/jasmine-maven-plugin/phantomjs.html

谢谢!