2016-10-26 1 views
0

Je suis en train de tester la fonction window.onload à l'aide de la structure jasmine. Mon code javascript est comme ci-dessous -Test de la fonction JS window.onload à l'aide de la structure Jasmine

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

et mon code Spec est comme ci-dessous -

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

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

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

quand je lance le fichier SpecRunner.html, je reçois une erreur - TypeError: Impossible de définir la propriété « innerHTML 'de null

Quel est le problème avec mon code?

+0

Le code de votre origine est erroné; vous appelez la fonction trop tôt. – SLaks

+0

document.getElementById ('supportmsg') n'existe pas encore. – voidzero

+0

Appel quelle fonction est trop tôt exactement? Si c'est faux alors quelle est la bonne façon de faire cela? Ma fonction Javascript fonctionne correctement mais le cas de test échoue. – Kate

Répondre

0

Voici mon implémentation de votre windowOnLoadFunction(). S'il vous plaît suivre les 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); 
 
    }); 
 
});

Observations:

  • est votre but de tester la fonction window.onload lui-même ou la fonctionnalité du windowOnLoadFunction que vous avez défini? Si ce dernier est la réponse vous êtes sur la bonne voie, mais si le ancien est votre réponse, alors je crains que vous essayez de vous mêler avec la fenêtre globale elle-même qui n'est pas recommended.
  • Vous devrez configurer l'élément HTML avant que votre test s'exécute, c'est la raison pour laquelle vous rencontrez l'erreur que vous avez mentionnée. Il existe de nombreuses façons de le faire, comme l'apposition de l'élément ou l'utilisation de projecteurs ou simplement la configuration des éléments de votre fonction beforeEach .
  • De même si vous essayez de tester un code, vous pouvez utiliser spies et callThrough() pour l'appeler et en même temps suivre l'espion.