2014-04-28 10 views
5

Ich bin nur neu in der Jasmine Js Test-Framework und habe heute einige seltsame Ergebnisse.Jasmine array.length erwarten

Siehe den folgenden Code (search ist eine Funktion, die eine api Anfrage Preforms und gibt ein Versprechen):

it('should be able to search', function() { 
    search('string').done(function(result) { 
     expect(result.length).toBeGreaterThan(1); //true 
     console.log(result.lenght); // undefined 
    }); 
}); 

Die Sache ist die, dass aufgrund einiger Fehler, die ich zu beheben haben, ist das Ergebnis aus der Versprechen ist nicht definiert, aber der Test ist als Success markiert. Ich finde das irreführend und wenn ich das nicht gründlich untersuche, hätte ich geglaubt, dass der Test ein Erfolg war, während es eindeutig nicht der Fall war. Ist das erwartetes Verhalten?

Antwort

10

Sie haben Tippfehler in console.log (result.length) bitte versuchen Sie dies.

it('should be able to search', function() { 
search('string').done(function(result) { 
    expect(result.length).toBeGreaterThan(1); //true 
    console.log(result.length); // undefined 
}); 
}); 
3

Zum Testen asynchronen Funktionen, müssen die Tests etwas anders geschrieben werden. Aus dem aktuellen Jasmine (2.0) documentation asynchronen Test werden wie folgt geschrieben:

beforeEach(function(done) { 
    setTimeout(function() { 
     // do setup for spec here 

     // then call done() in beforeEach() to start asynchronous test 
     done(); 
    }, 1); 
}); 

it('should be able to search', function(done) { 
    search('string').done(function(result) { 
     expect(result.length).toBeGreaterThan(1); //true 

     // call done() in the spec when asynchronous test is complete 
     done(); 
    }); 
}); 
+0

ich nach einer Möglichkeit, zu stoppen entschieden requirejs basierte Tests zu tun, wie ich bin ein bisschen irritiert, wird es auch dreht wieder in ein paar Tagen/Wochen. Danke für deinen Beitrag! – MegaWubs