2016-02-10 8 views
8

Ich teste eine JavaScript-Funktion, die ein Array von Zahlen zurückgibt, um zu sehen, ob das zurückgegebene Array die gleichen Elemente wie das Array enthält, das die erwartete Ausgabe enthält:Erwarten Sie, dass ein Array von Gleitkommazahlen nahe bei einem anderen Array in Jasmine sein

Dies funktioniert einwandfrei, wenn myArray und expectedArray nur Ganzzahlen enthalten, aber fehlschlagen, wenn mindestens ein Gleitkomma vorhanden ist, aufgrund von Gleitkommafehler. toBeCloseTo scheint nicht auf Arrays zu funktionieren.

Derzeit mache ich eine Schleife Mitglied weise Überprüfung zu tun:

for (var i = 0; i < myArray.length; i++) { 
    expect(myArray[i]).toBeCloseTo(expectedArray[i]); 
} 

... aber gibt es eine sauberere Weg, dies zu tun? Wenn der Test aus irgendeinem Grund fehlschlägt, wird die Ausgabe mit einer schrecklichen Anzahl der Fehlermeldungen aufgebläht.

+0

Check out 'toBeCloseTo' es zu tun scheint, was Sie wollen. – HBP

+1

Vielleicht können Sie sich den [ArrayContaining] (https://github.com/jasmine/jasmine/blob/master/src/core/asymmetric_equality/ArrayContaining.js) Matcher ansehen, den Loop anpassen und Ihren eigenen Matcher erstellen. – Sonata

Antwort

6

Der folgende Code sollte Ihre Frage beantworten:

actual.every((x, i) => expect(x).toBeCloseTo(expected[i])); 
0

Try this:

for (let i=0; i<returnedArray.length; i++){ 
    if(expectedArray.indexOf(returnedArray[i]) === -1){ 
     console.log("not a match") 
     break; 
    }else{ 
     console.log("it's a match") 
     break; 
    } 
} 
Verwandte Themen