Skip to content

Commit 624ac56

Browse files
João Dias Conde Azevedorickhanlonii
authored andcommitted
Enhancement/expect-to-be-close-to-with-infinity (#7444)
* toBeCloseTo works properly when comparing with Infinity * CHANGELOG update * Linter issue solved * Apply suggestions from code review Co-Authored-By: joao-conde <up201503256@fe.up.pt> * Update matchers.js * Update CHANGELOG * Fixed bug, leftover of old comment * Removed unecessary self-explanatory comments * Updated CHANGELOG * Snapshot updates
1 parent 9671afa commit 624ac56

File tree

4 files changed

+70
-1
lines changed

4 files changed

+70
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
- `[jest-config]` Add `dependencyExtractor` option to use a custom module to extract dependencies from files ([#7313](https://github.com/facebook/jest/pull/7313), [#7349](https://github.com/facebook/jest/pull/7349), [#7350](https://github.com/facebook/jest/pull/7350))
3333
- `[jest-haste-map]` Accept a `getCacheKey` method in `hasteImplModulePath` modules to reset the cache when the logic changes ([#7350](https://github.com/facebook/jest/pull/7350))
3434
- `[jest-config]` Add `haste.computeSha1` option to compute the sha-1 of the files in the haste map ([#7345](https://github.com/facebook/jest/pull/7345))
35+
- `[expect]` `expect(Infinity).toBeCloseTo(Infinity)` Treats `Infinity` as equal in toBeCloseTo matcher ([#7405](https://github.com/facebook/jest/pull/7405))
3536

3637
### Fixes
3738

packages/expect/src/__tests__/__snapshots__/matchers.test.js.snap

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,38 @@ Expected: <green>false</>
368368
Received: <red>true</>"
369369
`;
370370

371+
exports[`.toBeCloseTo() {pass: false} expect(-Infinity)toBeCloseTo( -1.23) 1`] = `
372+
"<dim>expect(</><red>received</><dim>).toBeCloseTo(</><green>expected</><dim>)</>
373+
374+
Precision: <green>2</>-digit
375+
Expected: <green>-1.23</>
376+
Received: <red>-Infinity</>"
377+
`;
378+
379+
exports[`.toBeCloseTo() {pass: false} expect(Infinity)toBeCloseTo( -Infinity) 1`] = `
380+
"<dim>expect(</><red>received</><dim>).toBeCloseTo(</><green>expected</><dim>)</>
381+
382+
Precision: <green>2</>-digit
383+
Expected: <green>-Infinity</>
384+
Received: <red>Infinity</>"
385+
`;
386+
387+
exports[`.toBeCloseTo() {pass: false} expect(Infinity)toBeCloseTo( 1.23) 1`] = `
388+
"<dim>expect(</><red>received</><dim>).toBeCloseTo(</><green>expected</><dim>)</>
389+
390+
Precision: <green>2</>-digit
391+
Expected: <green>1.23</>
392+
Received: <red>Infinity</>"
393+
`;
394+
395+
exports[`.toBeCloseTo() {pass: true} expect(-Infinity)toBeCloseTo( -Infinity) 1`] = `
396+
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBeCloseTo(</><green>expected</><dim>)</>
397+
398+
Precision: <green>2</>-digit
399+
Expected: <green>-Infinity</>
400+
Received: <red>-Infinity</>"
401+
`;
402+
371403
exports[`.toBeCloseTo() {pass: true} expect(0)toBeCloseTo( 0) 1`] = `
372404
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBeCloseTo(</><green>expected</><dim>)</>
373405

@@ -416,6 +448,14 @@ Expected: <green>1.234</>
416448
Received: <red>1.23</>"
417449
`;
418450

451+
exports[`.toBeCloseTo() {pass: true} expect(Infinity)toBeCloseTo( Infinity) 1`] = `
452+
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBeCloseTo(</><green>expected</><dim>)</>
453+
454+
Precision: <green>2</>-digit
455+
Expected: <green>Infinity</>
456+
Received: <red>Infinity</>"
457+
`;
458+
419459
exports[`.toBeCloseTo() accepts an optional precision argument: [0, 0.000004, 5] 1`] = `
420460
"<dim>expect(</><red>received</><dim>).</>not<dim>.toBeCloseTo(</><green>expected</><dim>, </><green>precision</><dim>)</>
421461

packages/expect/src/__tests__/matchers.test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,28 @@ describe('.toBeCloseTo()', () => {
894894
});
895895
});
896896

897+
[[Infinity, Infinity], [-Infinity, -Infinity]].forEach(([n1, n2]) => {
898+
it(`{pass: true} expect(${n1})toBeCloseTo( ${n2})`, () => {
899+
jestExpect(n1).toBeCloseTo(n2);
900+
901+
expect(() =>
902+
jestExpect(n1).not.toBeCloseTo(n2),
903+
).toThrowErrorMatchingSnapshot();
904+
});
905+
});
906+
907+
[[Infinity, -Infinity], [Infinity, 1.23], [-Infinity, -1.23]].forEach(
908+
([n1, n2]) => {
909+
it(`{pass: false} expect(${n1})toBeCloseTo( ${n2})`, () => {
910+
jestExpect(n1).not.toBeCloseTo(n2);
911+
912+
expect(() =>
913+
jestExpect(n1).toBeCloseTo(n2),
914+
).toThrowErrorMatchingSnapshot();
915+
});
916+
},
917+
);
918+
897919
[[0, 0.1, 0], [0, 0.0001, 3], [0, 0.000004, 5]].forEach(([n1, n2, p]) => {
898920
it(`accepts an optional precision argument: [${n1}, ${n2}, ${p}]`, () => {
899921
jestExpect(n1).toBeCloseTo(n2, p);

packages/expect/src/matchers.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,13 @@ const matchers: MatchersObject = {
8787
toBeCloseTo(actual: number, expected: number, precision?: number = 2) {
8888
const secondArgument = arguments.length === 3 ? 'precision' : null;
8989
ensureNumbers(actual, expected, '.toBeCloseTo');
90-
const pass = Math.abs(expected - actual) < Math.pow(10, -precision) / 2;
90+
91+
let pass = false;
92+
93+
if (actual == Infinity && expected == Infinity) pass = true;
94+
else if (actual == -Infinity && expected == -Infinity) pass = true;
95+
else pass = Math.abs(expected - actual) < Math.pow(10, -precision) / 2;
96+
9197
const message = () =>
9298
matcherHint('.toBeCloseTo', undefined, undefined, {
9399
isNot: this.isNot,

0 commit comments

Comments
 (0)