Angular 8: Что не так с тестом пайпа?

Должен признаться, я провел больше e2e-тестов, чем реальных тестов компонентов, я поклялся себе исправить это ужасное поведение, надеюсь, добился большего прогресса в понимании глубоких частей Angular. Но теперь я совершенно сбит с толку довольно простым на вид тестом...

import { EuroCurrencyPipe } from './euro-currency.pipe';

describe('EuroCurrencyPipe', () => {
  it('create an instance', () => {
    const pipe = new EuroCurrencyPipe();
    expect(pipe).toBeTruthy();
  });

  it('should be "100 €"', () => {
    const pipe = new EuroCurrencyPipe();
    const euroSum: string = pipe.transform(100);
    expect(euroSum).toBe('100,00 €');
  });
});

Действительно, в целом НИЧЕГО интересного, верно? Но давайте добавим упомянутую трубу... она предназначена для немецкой страницы без других валют.

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'euroCurrency'
})
export class EuroCurrencyPipe implements PipeTransform {
  transform(value: number): string {
    return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(value);
  }
}

Но когда я запускаю тест, он терпит неудачу с сообщением об ошибке...

Expected '100,00 €' to be '100,00 €'.

Это сбивает меня с толку... euroSum.localeCompare('100,00 €') приводит к 1 вместо ожидаемого 0

Что мне не хватает? Это действительно заставляет меня сомневаться в том немногом, что я уже знаю...

Ради интереса измените его с toBe на toEqual

Taplar 10.12.2020 20:00

@Taplar О, я тоже это сделал ... без костей.

ak.leimrey 10.12.2020 20:03

Да, строки - это примитивы, так что не думал, что это будет. Но пришлось попробовать. Это странно.

Taplar 10.12.2020 20:03

так во что оценивается евросумма?

Will Evers 10.12.2020 20:05

@WillEvers Ну, как говорится в сообщении об ошибке кода, «100,00 €», но это почему-то НЕ совпадает со строкой, которой она должна быть равна.

ak.leimrey 10.12.2020 20:07

вы можете добавить console.info(euroSum); после pipe.transform(100); строку и скажите мне, что такое сообщение журнала?

Will Evers 10.12.2020 20:10

Итак, это как-то связано с двумя последними символами результата. Если я сохраню результат в var x в своей консоли, а затем x.slice(0, -2) == '100,00' получу true. Если я не срезаю или только слайс -1, чтобы оставить пробел, это ложно, независимо от того, что я изменяю второе значение, чтобы оно выглядело точно так же

Taplar 10.12.2020 20:10

Код символа пробела из результата — 160. Код символа для обычного пробела — 32.

Taplar 10.12.2020 20:13

Символьный код из результата и из копирования и вставки в литеральную строку равен 8364. Таким образом, пробел выглядит так, как будто он виноват.

Taplar 10.12.2020 20:14

@Taplar, я могу подтвердить то, что ты говоришь. И я собираюсь быть честным, я не ожидал, что это произойдет. Не могли бы вы написать это как ответ, чтобы я мог его принять?

ak.leimrey 10.12.2020 20:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
10
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Строки не равны, потому что по какой-то причине символьный код видимого пробела в вычисленном результате равен 160, тогда как обычный пробел равен 32. Вот почему они не равны. Я сам не могу объяснить, почему они такие разные, но они есть.

Другие вопросы по теме