2017-03-10 8 views
0

Ich möchte meinen Code mit Jasmine testen. Der Code, den ich testen möchten, ist:Jasmin-Test, wenn Variable nicht undefiniert ist

window.document.cookie = 'user_input=;path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT'; 

var user_input = $('.selector').val(); 

if (typeof user_input !== "undefined") { 
    var date = new Date; 

    user_input = user_input.replace(/(\r\n|\n|\r)/gm, ' '); 
    date.setDate(date.getDate() + 1); 
    window.document.cookie = "user_input=" + user_input + ';path=/;expires=' + date.toGMTString(); 
} 

Der Test, den ich habe, ist:

describe('get_user_input',() => { 
    it('should update the cookie with users input if the input is NOT undefined',() => { 
     window.document.cookie = 'test_case='; 
     var user_input = 'test'; 
     expect(window.document.cookie).toEqual('test_case=test'); 
    }); 
}); 

dies jedoch nicht funktioniert und ich bin ganz neu zu Test so würde jede Hilfe dankbar! Vielen Dank!

Antwort

1

bekommt Ihre Funktion ein Element von DOM. In Ihren Tests müssen Sie also ein solches Element im DOM erstellen, das Ihre Funktion verwenden wird.

describe('get_user_input',() => { 
    beforeEach(() => { 
     window.document.cookie = 'test_case='; 
     $("<div class='selector'>test</div>").appendTo("body"); 
     yourFunction(); 
    }); 

    it('should update the cookie with users input if the input is NOT undefined',() => { 
     expect(window.document.cookie).toEqual('test_case=test'); 
    }); 
}); 

Aber bevorzugte Lösung wäre von DOM-Manipulation von Ihrer Funktion, um loszuwerden, und macht diese Funktion einfach prüfbar und weniger Kopplung.

function yourFunction(user_input) { 
    window.document.cookie = 'user_input=;path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT'; 

    if (typeof user_input !== "undefined") { 
     var date = new Date; 

     user_input = user_input.replace(/(\r\n|\n|\r)/gm, ' '); 
     date.setDate(date.getDate() + 1); 
     window.document.cookie = "user_input=" + user_input + ';path=/;expires=' + date.toGMTString(); 
    } 
} 

Und ein Test für ihn:

describe('get_user_input',() => { 
    let user_input; 

    beforeEach(() => { 
     window.document.cookie = 'test_case='; 
     user_input = "test"; 
     yourFunction(user_input); 
    }); 

    it('should update the cookie with users input if the input is NOT undefined',() => { 
     expect(window.document.cookie).toEqual(`test_case=${user_input}`); 
    }); 
}); 

Oder noch mehr - window.document.cookie aus der Funktion bewegen und berechneten Wert zurück. Setzen Sie den zurückgegebenen Wert dann auf window.document.cookie woanders in Ihrer App.

function yourFunction(cookie, user_input) { 
    let res = 'user_input=;path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT'; 

    if (typeof user_input !== "undefined") { 
     var date = new Date; 

     user_input = user_input.replace(/(\r\n|\n|\r)/gm, ' '); 
     date.setDate(date.getDate() + 1); 
     res = "user_input=" + user_input + ';path=/;expires=' + date.toGMTString(); 
    } 
    return res; 
} 

describe('get_user_input',() => { 
    let cookie; 
    let user_input; 
    let output; 

    beforeEach(() => { 
     cookie = 'test_case='; 
     user_input = "test"; 
     output = yourFunction(cookie, user_input); 
    }); 

    it('should update the cookie with users input if the input is NOT undefined',() => { 
     expect(output).toEqual(`test_case=${user_input}`); 
    }); 
}); 

Machen Sie Ihre Funktion so einfach wie möglich. Single Verantwortung rockt!

+0

Danke! Dieser hat mir geholfen! – AKr

-1

Sehen Sie diese einfach exemple Jasmin landpage:

describe("A suite is just a function", function() { 
    //initialisation here 
    var a; 

    it("and so is a spec", function() { 
    //then you run the code you want to test 
    a = true; 
    //and you test 
    expect(a).toBe(true); 
    }); 
}); 

mit diesem So kann Put-Codes in dem guten Ort:

describe('get_user_input',() => { 
 
    window.document.cookie = 'test_case='; 
 
    var user_input = 'test'; 
 
    it('should update the cookie with users input if the input is NOT undefined',() => { 
 

 
    if (typeof user_input !== "undefined") { 
 
     var date = new Date; 
 

 
     user_input = user_input.replace(/(\r\n|\n|\r)/gm, ' '); 
 
     date.setDate(date.getDate() + 1); 
 
     window.document.cookie = "user_input=" + user_input + ';path=/;expires=' + date.toGMTString(); 
 
    } 
 

 
    expect(window.document.cookie).toEqual('test_case=test'); 
 
    }); 
 
});

Edit: es wird nicht einmal passieren mit Dies. window.document.cookie enthält den Pfad und das Ablaufdatum.

describe('get_user_input',() => { 
 
     window.document.cookie = 'test_case='; 
 
     var user_input = 'test'; 
 
     it('should update the cookie with users input if the input is NOT undefined',() => { 
 

 
      if (typeof user_input !== "undefined") { 
 
      var date = new Date; 
 
      user_input = user_input.replace(/(\r\n|\n|\r)/gm, ' '); 
 
      date.setDate(date.getDate() + 1); 
 
      window.document.cookie = "user_input=" + user_input + ';path=/;expires=' + date.toGMTString(); 
 
      } 
 

 
      expect(window.document.cookie).toEqual('test_case=test;path=/;expires=' + date.toGMTString() + '); 
 
      }); 
 
     });

+0

abgeschlossen Antwort –

+0

Sorry, aber diese Antwort hat mein Problem nicht gelöst. Die ausgewählte Antwort in diesem Thread hat jedoch. Danke trotzdem! – AKr

Verwandte Themen