@bankify/react-native-animate-number
Version:
Animated number component
100 lines (87 loc) • 2.6 kB
JavaScript
import React from 'react'
import {Text} from 'react-native'
import { shallow, mount } from 'enzyme'
import AnimateNumber from '../dist/index.js'
import { expect } from 'chai'
import { jsdom } from 'jsdom'
// simulate DOM environment
let exposedProperties = ['window', 'navigator', 'document'];
global.document = jsdom('');
global.window = document.defaultView;
Object.keys(document.defaultView).forEach((property) => {
if (typeof global[property] === 'undefined') {
exposedProperties.push(property);
global[property] = document.defaultView[property];
}
});
global.navigator = {
userAgent: 'node.js'
};
describe('<AnimateNumber/>', () => {
it('renders <AnimateNumber/> component', () => {
const wrapper = shallow(<AnimateNumber/>)
expect(wrapper.length).to.be.equal(1)
})
it('check if default props is correct', () => {
const wrapper = shallow(<AnimateNumber/>)
let text = wrapper.find(Text).nodes[0]
expect(wrapper.find(Text).length).to.equal(1)
expect(text.props.value).to.equal(0)
expect(text.props.steps).to.equal(45)
expect(text.props.interval).to.equal(14)
expect(text.props.timing).to.equal('linear')
})
it('animate number with custom props', (done) => {
let props = {
value : 120,
steps : 30,
interval : 15,
}
const wrapper = mount(<AnimateNumber {...props}/>)
setTimeout(() => {
expect(wrapper.state().value).to.equal(120)
done()
}, props.steps * props.interval*1.5)
})
it('does formatter work correctly ?', (done) => {
let expectVal = Math.random()*1000
let props = {
value : expectVal,
steps : 30,
interval : 15,
formatter : (val) => `$ ${val} ^_^`,
onFinish : (val, displayVal) => {
expect(displayVal).to.equal(`$ ${expectVal} ^_^`)
done()
}
}
mount(<AnimateNumber {...props} />)
})
it('does countBy prop works correctly ?', (done) => {
let props = {
value : Math.random() * 50,
steps : 30,
interval : 5,
countBy : 1,
onProgress : (prev, val) => {
expect(val - prev).to.equal(1)
},
onFinish : () => {
done()
}
}
mount(<AnimateNumber {...props} />)
})
it('component should DEFINITELY work properly when value is the only prop', (done) => {
let count = 0;
for(let i=0; i< 10; i++) {
let wrapper = mount(<AnimateNumber value={3000}/>)
setTimeout(() => {
expect(wrapper.state('value')).to.equal(3000)
count ++;
if(count == 10)
done()
}, 1000)
}
})
})