Test Renderer
İdxal Etmə
import TestRenderer from 'react-test-renderer'; // ES6
const TestRenderer = require('react-test-renderer'); // npm ilə ES5İcmal
Bu paket, React komponentlərini Javascript obyektlərinə render etmək üçün, DOM və ya nativ mobil mühitindən asılı olmayan React renderer-i təmin edir.
Bu paket, React DOM və ya React Native komponentinin, brauzer və ya jsdom olmadan render etdiyi platforma görünüş iyerarxiyasının snəpşotunu asan formada çəkməyə imkan yaradır.
Məsələn:
import TestRenderer from 'react-test-renderer';
function Link(props) {
return <a href={props.page}>{props.children}</a>;
}
const testRenderer = TestRenderer.create(
<Link page="https://www.facebook.com/">Facebook</Link>
);
console.log(testRenderer.toJSON());
// { type: 'a',
// props: { href: 'https://www.facebook.com/' },
// children: [ 'Facebook' ] }JSON ağacının kopiyasını yadda saxlayıb testlərdə bu ağacın dəyişdiyini yoxlamaq üçün Jest-in snəpşot test xüsusiyyətindən istifadə edə bilərsiniz. Əlavə məlumat üçün bura baxın.
Həmçinin siz nəticənin üzərindən keçib lazım olan nodları tapa bilər və bu nodlar üzərində iddialarınızı yoxlaya bilərsiniz.
import TestRenderer from 'react-test-renderer';
function MyComponent() {
return (
<div>
<SubComponent foo="bar" />
<p className="my">Salam</p>
</div>
)
}
function SubComponent() {
return (
<p className="sub">Sub</p>
);
}
const testRenderer = TestRenderer.create(<MyComponent />);
const testInstance = testRenderer.root;
expect(testInstance.findByType(SubComponent).props.foo).toBe('bar');
expect(testInstance.findByProps({className: "sub"}).children).toEqual(['Sub']);TestRenderer
TestRenderer instansiyası
testRenderer.toJSON()testRenderer.toTree()testRenderer.update()testRenderer.unmount()testRenderer.getInstance()testRenderer.root
TestInstance
testInstance.find()testInstance.findByType()testInstance.findByProps()testInstance.findAll()testInstance.findAllByType()testInstance.findAllByProps()testInstance.instancetestInstance.typetestInstance.propstestInstance.parenttestInstance.children
Arayış
TestRenderer.create()
TestRenderer.create(element, options);Göndərilən React elementi ilə TestRenderer instansiyası yaradın. Bunun real DOM-dan istifadə etməməsinə baxmayaraq, iddialarımızı yoxlaya bilmək üçün komponent ağacı yenə də bütünlüklə yaddaşa render edilir. Qaytarılan instansiyanın funksiya və parametrləri aşağıda göstərilib.
TestRenderer.act()
TestRenderer.act(callback); TestRenderer.act, react-dom/test-utils-də olan act() köməkçisi kimi iddialarınızı yoxlamaq üçün komponentləri hazırlayır. act()-in bu versiyasını TestRenderer.create və testRenderer.update çağırışlarını əhatə etmək üçün işlədin.
import {create, act} from 'react-test-renderer';
import App from './app.js'; // Test edilən komponent
// komponenti render et
let root;
act(() => {
root = create(<App value={1}/>)
});
// ana komponentin üzərində iddaları yoxlayın
expect(root.toJSON()).toMatchSnapshot();
// fərqli proplar ilə yeniləyin
act(() => {
root.update(<App value={2}/>);
})
// ana komponentin üzərində iddaları yoxlayın
expect(root.toJSON()).toMatchSnapshot();testRenderer.toJSON()
testRenderer.toJSON()Render edilmiş ağacı təmsil edən obyekti qaytarır. Render edilmiş ağac yalnız <div> və ya <View> kimi platform-spesifik nodlardan ibarətdir. Bu ağacda istifadəçi tərəfindən yaranmış komponentlər olmur. Snəpşot testi üçün faydalıdır.
testRenderer.toTree()
testRenderer.toTree()Render edilmiş ağacı təmsil edən obyekti qaytarır. toJSON()-dan fərqli olaraq bu funksiya daha ətraflıdır və istifadəçi tərəfindən yaranmış komponentləri də obyektə daxil edir. Siz test renderer üzərində öz test kitabxananızı yazmırsınızsa, bu funksiya sizə lazım deyil.
testRenderer.update()
testRenderer.update(element)Yaddaşda olan ağacı yeni ana elementi ilə yenidən render edin. Bu funksiya React-in ana komponentdə yenilənməsini simulyasiya edir. Əgər yeni elementin tipi və açarı keçmiş elementinki ilə eynidirsə ağac yenilənəcək. Əks halda yeni ağac mount olunacaq.
testRenderer.unmount()
testRenderer.unmount()Yaddaşda olan ağacı unmount edib uyğun lifecycle hadisələrini çağırın.
testRenderer.getInstance()
testRenderer.getInstance()Əgər mümkündürsə, ana elementin instansiyasını qaytarın. Əgər ana element funksiya komponentidirsə bu funksiya işləməyəcək. Çünki funksiya komponentlərinin instansiyaları olmur.
testRenderer.root
testRenderer.rootAğacda olan spesifik nodlar haqqında iddiaları yaratmaq üçün faydalı olan ana “test instansiya” obyektini qaytarın. Siz bu instansiya ilə dərində olan digər “test instansiyalarını” tapa bilərsiniz.
testInstance.find()
testInstance.find(test)test(testInstance) true qaytaran tək test instansiyasını tapın. Əgər test(testInstance) yalnız tək instansiya üçün true qaytarmırsa bu funksiya istisna atacaq.
testInstance.findByType()
testInstance.findByType(type)Təmin edilən type ilə tək test instansiyasını tapın. Əgər təmin edilən type ilə yalnız tək instansiya yoxdursa bu funksiya istisna atacaq.
testInstance.findByProps()
testInstance.findByProps(props)Təmin edilən props ilə tək test instansiyasını tapın. Əgər təmin edilən props ilə yalnız tək instansiya yoxdursa, bu funksiya istisna atacaq.
testInstance.findAll()
testInstance.findAll(test)test(testInstance) true qaytaran bütün test instansiyalarını tapın.
testInstance.findAllByType()
testInstance.findAllByType(type)Təmin edilən type ilə bütün test instansiyalarını tapın.
testInstance.findAllByProps()
testInstance.findAllByProps(props)Təmin edilən props ilə bütün test instansiyalarını tapın.
testInstance.instance
testInstance.instanceGöstərilən test instansiyasına uyğun olan komponent. Funksiya komponentlərinin instansiyaları olmadığından bu yalnız sinif komponentləri üçün mövcuddur. Verilən komponentin this dəyəri ilə uyğundur.
testInstance.type
testInstance.typeTest instansiyasının komponent tipi. Məsələn, <Button /> komponentinin tipi Button-dır.
testInstance.props
testInstance.propsTest instansiyasına uyğun gələn proplar. Məsələn, <Button size="small" /> komponentinin {size: 'small'} propları var.
testInstance.parent
testInstance.parentTest instansiyasının ana test instansiyası.
testInstance.children
testInstance.childrenTest instansiyasının uşaq test instansiyaları.
İdeyalar
Xüsusi mok refləri düzəltmək üçün TestRenderer.create-ə createNodeMock funksiyasını göndərə bilərsiniz.
createNodeMock cari elementi qəbul edir və mok ref obyekti qaytarır.
Bu ref-lərdən asılı olan komponentləri test etmək üçün faydalıdır.
import TestRenderer from 'react-test-renderer';
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.input = null;
}
componentDidMount() {
this.input.focus();
}
render() {
return <input type="text" ref={el => this.input = el} />
}
}
let focused = false;
TestRenderer.create(
<MyComponent />,
{
createNodeMock: (element) => {
if (element.type === 'input') {
// fokus funksiyasını mok edin
return {
focus: () => {
focused = true;
}
};
}
return null;
}
}
);
expect(focused).toBe(true);