decimalJsLike.test.ts•1.74 kB
import Decimal from 'decimal.js'
import { isDecimalJsLike } from './decimalJsLike'
describe('isDecimalJsLike', () => {
test('true for decimal.js instance', () => {
expect(isDecimalJsLike(new Decimal('12.3'))).toBe(true)
})
test('false for null', () => {
expect(isDecimalJsLike(null)).toBe(false)
})
test('false for primitives', () => {
expect(isDecimalJsLike(1)).toBe(false)
expect(isDecimalJsLike('one')).toBe(false)
expect(isDecimalJsLike(true)).toBe(false)
expect(isDecimalJsLike(Symbol())).toBe(false)
expect(isDecimalJsLike(BigInt('123'))).toBe(false)
})
test('true for decimal.js-like object', () => {
const object = {
d: [12, 3000000],
e: 1,
s: 1,
toFixed: jest.fn(),
}
expect(isDecimalJsLike(object)).toBe(true)
})
test('false for object with incorrect `d` property', () => {
const object = {
d: 'yes',
e: 1,
s: 1,
toFixed: jest.fn(),
}
expect(isDecimalJsLike(object)).toBe(false)
})
test('false for object with incorrect `e` property', () => {
const object = {
d: [12, 3000000],
e: 'one',
s: 1,
toFixed: jest.fn(),
}
expect(isDecimalJsLike(object)).toBe(false)
})
test('false for object with incorrect `s` property', () => {
const object = {
d: [12, 3000000],
e: 1,
s: '+',
toFixed: jest.fn(),
}
expect(isDecimalJsLike(object)).toBe(false)
})
test('allows to have extra properties', () => {
const object = {
d: [12, 3000000],
e: 1,
s: 1,
toFixed: jest.fn(),
something: 'other',
isFinite() {
return true
},
}
expect(isDecimalJsLike(object)).toBe(true)
})
})