2017-07-28 12 views
1

Jasmine hat sehr kurze Dokumentation; oft ist es genug. Nicht immer.Jasmine toBeCloseTo was ist der zweite Parameter?

Ich möchte wissen, was genau der zweite Parameter von toBeCloseTo ist. Offizielle Referenz zeigt nur:

it("The 'toBeCloseTo' matcher is for precision math comparison", function() { 
    var pi = 3.1415926, e = 2.78; 
    expect(pi).not.toBeCloseTo(e, 2); 
    expect(pi).toBeCloseTo(e, 0); 
}); 

OK es ist Präzision, aber was bedeutet praktisch "Präzision" in diesem Fall? Ist es die Anzahl der Ziffern nach dem "." das sollte gleich sein?

Mein Fall: Ich möchte zwei Zeitstempel in Millisekunden vergleichen; Wenn der Unterschied zwischen ihnen weniger als 100 ist, ist es in Ordnung für mich.

Als Beispiel, was ist der Wert von X im folgenden Fall?

var timestamp1 = 1501254807000; 
var timestamp2 = 1501254807099; 
var timestamp3 = 1501254807100; 
var precision = X; 
expect(timestamp1).toBeCloseTo(timestamp2, precision); //this should pass 
expect(timestamp1).toBeCloseTo(timestamp3, precision); //this should NOT pass 

Wenn die Genauigkeit nur für Dezimalzahlen ist, konnte ich meine ganzen Zahlen von 1000 dividieren Dezimalzahlen zu bekommen, aber wie auch immer, ich weiß nicht, was X. ist Vorerst ich auf diese Weise tun:

expect(Math.abs(timestamp2-timestamp1)).toBeLessThan(100); 

aber es ist nicht sehr gut lesbar, und ich möchte toBeCloseTo verwenden (da es exests ...).

Dank


bearbeiten. Die folgenden Ergebnisse können helfen:

expect(1000000.005).toBeCloseTo(1000000.000,3); //fails 
expect(1000000.005).toBeCloseTo(1000000.000,2); //fails 
expect(1000000.005).toBeCloseTo(1000000.000,1); //pass 
+1

Haben Sie versucht, Blick auf [Quelle für die toBeCloseTo Matcher] (https://github.com/jasmine/jasmine/blob/master/src/core/matchers/toBeCloseTo.js)? –

+2

Die Dokumentation sagt "Die Anzahl der zu überprüfenden Dezimalpunkte". –

+0

BTW ich fügte ein neues Beispiel hinzu, das scheint nicht die entsprechende Dokumentation zu sein, wie von Nikolaj berichtet wurde – fresko

Antwort

1

Wie @Nikolaj angegeben wurde, die „Präzision“ Parameter gibt die Anzahl der Dezimalstellen, die die Matcher Präzision überprüfen wird bei, mit Rundung.

Für die Beispiele, die Sie angegeben haben, schlagen die ersten zwei Assertions fehl, da bei 3 bzw. 2 Dezimalstellen die Zahlen unterschiedlich sind (bei 2 Dezimalstellen wird das nachfolgende 05 auf 1 gerundet). Bei 1 Dezimalstelle sind die Zahlen gleich.

Der Matcher hat einen negativen Wert annehmen Präzision, z.B .:

expect(1000).toBeCloseTo(1003,-1); //pass 
expect(1000).toBeCloseTo(1100,-2); //fail 
expect(1000).toBeCloseTo(1100,-3); //pass 

Aber es ist nicht sehr einstellbar darüber hinaus. Leider bedeutet dies, dass der Matcher nicht für Ihre Zwecke geeignet ist, also sind Sie wahrscheinlich bei Ihrer vorgeschlagenen Lösung geblieben.

0

Hier ist ein Beispiel aus Jest Dokumentation, die mir geholfen hat, den Wert von toBeCloseTo Matcher besser zu verstehen.

expect(0.1+0.2).toBe(0.3); // fails becouse it's 0.30000000000000004 
expect(0.1+0.2).toBeCloseTo(0.3); // pass 
Verwandte Themen