使用Jasmine框架测试window.onload JS函数

时间:2016-10-26 16:38:41

标签: javascript jquery html jasmine jasmine-jquery

我正在使用jasmine框架测试window.onload函数。我的javascript代码如下 -

window.onload = windowonloadFunction();

function windowonloadFunction(){
    if('WebSocket' in window){
    document.getElementById('supportmsg').innerHTML = 'Hi';
    var img = document.createElement("img");
    img.src = "images/check.png";
    document.getElementById('supportmsg').appendChild(img);
    }
}

我的规范代码如下 -

describe('Test Suite for windowonloadFunction function',function(){

    it("This test check all tasks performed on window.load",function(){

        affix('label[id="supportmsg"]');
        windowonloadFunction();
});
});

当我运行SpecRunner.html文件时,我收到错误 - TypeError:无法设置null

的属性'innerHTML'

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

这是我对windowOnLoadFunction()的实现。请关注jsfiddle here



var fun = {}
fun.windowonloadFunction = function() {

  document.getElementById('supportmsg').innerHTML = 'Hi';
  var img = document.createElement("img");
  img.src = "http://www.hyundai.co.uk/test-import/model-profiles/small_cars/i10_premium_sweet_orange.png";
  document.getElementById('supportmsg').appendChild(img);

};



describe("A suite", function() {
  var element;
  beforeEach(function() {
    element = $("<div id= 'supportmsg'/>");
    $(document.body).append(element);
  });

  it("contains spec with an expectation", function() {
    spyOn(fun, 'windowonloadFunction').and.callThrough();
    fun.windowonloadFunction();
    expect(fun.windowonloadFunction.calls.count()).toEqual(1);
  });
});
&#13;
&#13;
&#13;

观察:

  • 你的目标是测试window.onload函数本身或者 您定义的windowOnLoadFunction的功能?如果 后者是你正确的答案,但如果 前者是你的答案,然后我害怕你试图干涉 全局窗口本身不是recommended
  • 您需要在测试运行之前设置HTML元素,即 你遇到你提到的错误的原因。 有很多方法可以做到,比如粘贴元素或使用 固定或简单地设置beforeEach中的元素 功能
  • 此外,如果您要测试代码,可以使用spies和 callThrough()来调用它,同时跟踪间谍。