【问题标题】:Angular 8: What is wrong with pipe test? [duplicate]Angular 8:管道测试有什么问题? [复制]
【发布时间】:2020-12-11 03:16:35
【问题描述】:

我不得不承认,我做了比实际组件测试更多的 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 哦,我也这样做了...没有骰子。
  • 是的,字符串是原语所以没想到会这样。但不得不尝试。这是一个奇怪的。
  • 那么 euroSum 的评估结果是什么?
  • @WillEvers 好吧,正如代码错误消息所说,'100,00 €' 但它与它应该等于的字符串不同。

标签: javascript angular typescript


【解决方案1】:

字符串不相等,因为由于某种原因,计算结果中可见空间的字符代码是 160,而正常空间是 32。这就是它们不相等的原因。我自己无法解释为什么它们如此不同,但它们确实如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多