How to tell Jest that spaces are in fact, spaces?
Asked Answered
A

1

24

Given the code:

import { getLocale } from './locale';

export const euro = (priceData: number): string => {
  const priceFormatter = new Intl.NumberFormat(getLocale(), {
    style: 'currency',
    currency: 'EUR',
  });

  return priceFormatter.format(priceData);
}

export default null;

and the related test:

import { euro } from './currency';

test('euro', () => {
  expect(euro(42)).toBe("42,00 €");
});

Jest says:

Screenshot of Jest complaining that the string are not equal even though both are seemingly the same string. Error is on the space in between number and currency produced by the Intl component.

Even if I copy-paste the expected result of Jest to my assert, the error is still the same.

So the question is: Why the hell? :-D

Alessandraalessandria answered 28/2, 2021 at 12:36 Comment(1)
#54242539Bowker
B
41

You want this test to assert:

"42,00\xa0€"

It's not a space (different ascii code / unicode). According to a jest issue about string comparison being incorrect Intl.NumberFormat uses a non-breaking space.

And as pointed out in a similar question's answer:

NumberFormat use small non-breaking space (\u202f) for thousand separator and normal non-breaking space beforece currency (\xa0).

Bowker answered 28/2, 2021 at 12:41 Comment(1)
When formatting a time, Date.toLocaleString might also use \u202f as the space between the time and "AM" or "PM".Capuchin

© 2022 - 2024 — McMap. All rights reserved.