Как конвертировать число с запятой в число в Angular - PullRequest
0 голосов
/ 25 октября 2019

Я тестирую свой Custom Pipe: NoCommaPipe. Но когда я создаю тест с вводом 10000000, он возвращает NaN. Как создать тест с вводом, например: 10 000 000

no-comma.pipe.ts:

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

@Pipe({
    name: 'noComma'
})

export class NoCommaPipe implements PipeTransform {

    transform(val: number): string {
        let transformedVal: string;
        if(val === undefined || val === null) {
            transformedVal = ""
        } else {
            transformedVal = val.toString().replace(/,/g, "");
        }
        return transformedVal;
    }
}

no-comma.pipe.spec.ts:

import { NoCommaPipe } from './no-comma.pipe';

fdescribe('NoCommaPipe', () => {

    let noCommaPipe: NoCommaPipe;

    beforeEach(() => {
        noCommaPipe = new NoCommaPipe();
    })

    it('should create', () => {
        expect(noCommaPipe).toBeTruthy();
    })

    it('should return empty string on input is undefined', () => {
        expect(noCommaPipe.transform(undefined)).toEqual('');
    })

    it('should return empty string on input is null', () => {
        expect(noCommaPipe.transform(null)).toEqual('');
    })

    it('should return 10000000 on input equal to 10,000,000', () => {
        expect(noCommaPipe.transform(Number('10,000,000'))).toEqual('10000000');
    })
})

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Возвращает NaN, потому что это то, что вы предоставляете в качестве аргумента для вашего метода:

console.log(Number('10,000,000'));

Здесь вы можете видеть, что, если вы не используете Number(), он работает как положено.

function transform(val) {
  let transformedVal;
  if (val === undefined || val === null) {
    transformedVal = ""
  } else {
    transformedVal = val.toString().replace(/,/g, "");
  }
  return transformedVal;
}

console.log(transform(Number('10,000,000')));
console.log(transform('10,000,000'));

В ответ на комментарий ...

console.log(typeof('10,000,000'));
console.log(typeof(10000000));
console.log(10,000,000);
1 голос
/ 25 октября 2019

Вы проходите тестирование.

Число ('10, 000 000 ')

Всегда будет возвращаться NaN, поскольку 10 000 000 не распознается как число, а скорее как строка. ,Нет никакой причины передавать ваш атрибут transform как число в вашей директиве, поскольку полученные значения всегда будут строками ...

Просто измените val: number на val: string или any и удалите приведение к Number

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...