كيفية إعداد Jest & Enzyme مثل الرئيس

عندما بدأت في كتابة الاختبارات لتطبيق React الخاص بي ، استغرق الأمر مني بعض المحاولات قبل أن أكتشف كيفية إعداد بيئة الاختبار الخاصة بي باستخدام Jest
& Enzyme
. يفترض هذا البرنامج التعليمي أن لديك بالفعل تطبيق React تم إعداده باستخدام webpack
& babel
. سنواصل من هناك.
هذا جزء من سلسلة من المقالات التي كتبتها. أتحدث عن كيفية إعداد تطبيق React للإنتاج بالطريقة الصحيحة والسهلة.
- الجزء 1 كيفية الجمع بين Webpack 4 و Babel 7 لإنشاء تطبيق React رائع (محادثات حول إعداد webpack مع babel بالإضافة إلى دعم scss)
- الجزء 2 ستساعدك هذه الأدوات في كتابة كود نظيف (محادثات حول أتمتة الكود الخاص بك ، لذا فإن كل الكود الذي تكتبه هو كود جيد)
- هذا هو الجزء الثالث الذي سأتحدث فيه عن إعداد Jest with Enzyme.
قبل أن نبدأ ، إذا شعرت في أي وقت بالعجز ، فلا تتردد في التحقق من مستودع الأكواد . العلاقات العامة هي موضع ترحيب كبير إذا شعرت أنه يمكن تحسين الأمور.
المتطلبات المسبقة
تحتاج إلى تثبيت Node من أجل استخدام npm (مدير حزمة العقدة).
أول الأشياء أولاً ، قم بإنشاء مجلد يسمى app
ثم افتح الجهاز الطرفي الخاص بك وانتقل إلى هذا app
المجلد واكتب:
npm init -y
سيؤدي هذا إلى إنشاء package.json
ملف لك. package.json
أضف ما يلي في ملفك :
{ "name": "react-boiler-plate", "version": "1.0.0", "description": "A react boiler plate", "main": "src/index.js", "author": "Adeel Imran", "license": "MIT", "scripts": { "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage --colors", }, "devDependencies": { "@babel/core": "^7.0.0", "@babel/polyfill": "^7.0.0-beta.51", "@babel/preset-env": "^7.0.0-beta.51", "@babel/preset-react": "^7.0.0-beta.51", "babel-core": "^7.0.0-bridge.0", "babel-jest": "^23.4.2", "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.1.1", "jest": "^23.4.2" } }
ثانيًا ، قم بإنشاء مجلد يسمى src
في app
المجلد الخاص بك . src/app/
المجلد هو المكان الذي سيوجد فيه كل كود React الخاص بك مع اختباره. لكن قبل ذلك دعونا نفهم سبب قيامنا بما فعلناه في package.json
ملفنا.
سأتحدث عن scripts
(الوعد) قليلاً. ولكن قبل ذلك ، دعونا نتعرف على سبب حاجتنا إلى التبعيات التالية. أريدك أن تعرف ما يدور في داخلك package.json
فلنبدأ
@babel/core
نظرًا لأننا نستخدم حزمة الويب بشكل عام لتجميع كود رد الفعل الخاص بنا. Babel هو تبعية رئيسية تساعد على إخبار webpack بكيفية ترجمة الكود. هذا هو تبعية الأقران لاستخدام Jest أيضًا.
@babel/polyfil
تتطلب Jest شيئًا يسمى regenerator-runtime
، يأتي @ babel / polyfill مدمجًا به وبعض الميزات الرائعة الأخرى.
@babel/preset-env
& @babel/preset-react
Is لميزات مثل ES6 و React ، لذلك أثناء كتابة اختبارات الوحدة Jest
تعرف بنية ES6 و JSX .
babel-core
هذا هو في الغالب تبعية Jest
، لأننا نحتاج babel-core
إلى Jest للعمل.
babel-jest
سيساعد Babel على فهم الكود الذي نكتبه Jest
enzyme
هذه مكتبة تأكيدات تسهل تأكيد إخراج مكونات React ومعالجتها واجتيازها.
enzyme-adapter-react-16
محول / أدوات وسطى لمساعدة Jest على الاتصال enzyme
jest
Jest هي مكتبة الاختبار التي سنجري عليها اختباراتنا.
يمكنك إلقاء نظرة على مثال بسيط جدًا للعظام المجردة من قبل الأشخاص الرائعين في الدعابة. يستخدم بابل لإجراء اختبار بسيط هنا .
أيضًا إذا كنت تريد إعداد webpack لـ React ، فهذه نظرة عامة مفصلة حول كيفية القيام بذلك. أو يمكنك ببساطة الاطلاع على قاعدة الشفرة بأكملها التي تستخدم بنية العظام الأساسية لما ستحتاجه عند إعداد تطبيق React الخاص بك مع jest / enzyme ( مجموعة أدوات البدء هنا ).
بعد ذلك ، دعنا ننشئ ملفًا يسمى jest.config.js
في مجلدنا الرئيسي app
ونضيف إليه الكود التالي. سأتحدث عما يفعله هذا بعد قليل.
// For a detailed explanation regarding each configuration property, visit: // //jestjs.io/docs/en/configuration.html module.exports = { // Automatically clear mock calls and instances between every test clearMocks: true, // An array of glob patterns indicating a set of files for which coverage information should be collected collectCoverageFrom: ['src/**/*.{js,jsx,mjs}'], // The directory where Jest should output its coverage files coverageDirectory: 'coverage', // An array of file extensions your modules use moduleFileExtensions: ['js', 'json', 'jsx'], // The paths to modules that run some code to configure or set up the testing environment before each test setupFiles: ['/enzyme.config.js'], // The test environment that will be used for testing testEnvironment: 'jsdom', // The glob patterns Jest uses to detect test files testMatch: ['**/__tests__/**/*.js?(x)', '**/?(*.)+(spec|test).js?(x)'], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped testPathIgnorePatterns: ['\\\\node_modules\\\\'], // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href testURL: '//localhost', // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation transformIgnorePatterns: ['/node_modules/'], // Indicates whether each individual test should be reported during the run verbose: false, };
ثانيًا ، قم بإنشاء ملف يسمى enzyme.config.js
في app
مجلدك الرئيسي وأضف الكود التالي إليه.
/** Used in jest.config.js */ import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; configure({ adapter: new Adapter() });
دعونا نتحدث أولاً عن jest.config.js
clearMocks
سوف يمحو جميع النماذج ، حتى لا يتغير النموذج في nth
الاختبار أو يؤثر على الاختبار في n+1
الموضع.
collectCoverageFrom
يخبر jest بجمع تغطية الكود من جميع ملفات .js في src/
المجلد. تخبرك التغطية بالنسبة المئوية التي تغطيها حالات الاختبار الخاصة بك من الشفرة.
coverageDirectory
يخبر Jest أنه يجب تسمية دليل التغطية coverage
في app/
المجلد الرئيسي .
moduleFileExtensions
يأخذ مجموعة من الامتدادات التي تخبر Jest عن الملفات التي يمكنها اختبارها. نطلب منه اختبار جميع ملفات .js | .jsx | .json.
setupFiles
هذا مهم حقًا ، لأنه يخبر Jest المسار من حيث يمكنه الحصول على تكوينات للإنزيم (المزيد حول هذا لاحقًا)
testEnvironment
تحدد البيئة التي ستجري Jest اختبارها عليها ، نظرًا لأننا نختبر تطبيق ويب. لقد ضبطت البيئة لjsdom
testMatch
يخبر Jest الملفات التي سيختبرها. أقوم بتمرير تكوينين هنا ، أحدهما اختبار جميع الملفات في أي مجلد باسم __tests__
أو اختبار جميع الملفات التي تنتهي بـ spec.js|.jsx
أوtest.js|.jsx
testPathIgnorePatterns
لا أريد Jest إجراء الاختبارات داخل node_modules
مجلدي. لذلك فقد تجاهلت تلك الملفات هنا.
testURL
يعيّن هذا الخيار عنوان URL لبيئة jsdom. ينعكس ذلك في خصائص مثل location.href
transformIgnorePatterns
مصفوفة من سلاسل نمط regexp المطابقة لجميع مسارات الملفات المصدر ، ستتخطى الملفات المتطابقة التحويل. هنا أعطيها واحدة فقطnode_modules
verbose
يمنحك "إذا كان صحيحًا" سجلًا تفصيليًا للغاية عند إجراء الاختبارات. لا أريد رؤية ذلك ، والتركيز فقط على جوهر اختباراتي. لذلك قمت بتعيين قيمته علىfalse
دعونا نتحدث عن enzyme.config.js
I تمرير مسار enzyme.config.js
في بلدي setupFiles
في تكوينات الدعابة. عندما ينتقل إلى هذا الملف ، يأخذ Jest تكوينات الإنزيم. هذا يعني أن جميع الاختبارات ستجرى على Jest. لكن التأكيدات وكل شيء آخر سيتم بواسطة الإنزيم.
مع وجود هذا في مكانه ، تتم التكوينات لدينا. لنتحدث عن البرامج النصية:
"scripts": { "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage --colors", },
npm run test
سيؤدي هذا إلى تشغيل Jest وتنفيذ جميع الاختبارات
npm run test:watch
سيتم إجراء جميع الاختبارات والاستمرار في وضع المراقبة ، بحيث عند إجراء أي تغييرات على حالات الاختبار الخاصة بنا ، سيتم تنفيذ حالات الاختبار هذه مرة أخرى.
npm run test:coverage
سيُنشئ تقرير تغطية استنادًا إلى جميع الاختبارات التي يجريها ، ويعطيك تقرير تغطية مفصل في app/coverage
المجلد.
قبل إجراء اختبار ، نحتاج إلى إنشاء اختبار. دعنا نبدأ. في app/src/
مجلدك ، قم بإنشاء ملف يسمى WelcomeMessage.js .
import React, { Fragment } from 'react'; const styles = { heading: { color: '#fff', textAlign: 'center', marginBottom: 15, }, logo: { width: 250, heading: 250, objectFit: 'cover', }, }; const WelcomeMessage = ({ imgPath }) => { return ( Welcome To
); }; export default WelcomeMessage;
في نفس المجلد ، قم بإنشاء ملف يسمى WelcomeMessage.test.js
import React from 'react'; import { shallow } from ‘enzyme’; // Components import WelcomeMessage from './WelcomeMessage'; function setup() { const props = { imgPath: 'some/image/path/to/a/mock/image', }; const wrapper = shallow(); return { wrapper, props }; } describe('WelcomeMessage Test Suite', () => { it('Should have an image', () => { const { wrapper } = setup(); expect(wrapper.find('img').exists()).toBe(true); }); });
هناك شيء واحد يجب ملاحظته هنا وهو أنك لن تكون قادرًا على تشغيل WelcomMessage.js
الملف بالفعل لأنك لم تقم webpack
بالإعداد babel
. إذا كنت تبحث عن طريقة لإعداد ذلك ، فراجع البرنامج التعليمي الخاص بي حول كيفية الجمع بين Webpack 4 و Babel 7 لإنشاء تطبيق React رائع. أيضًا إذا كنت تريد فقط الكود المصدري لهذا البرنامج التعليمي ، فإليك مستودع الكود . لقد تم بالفعل إعداد Jest & Enzyme. لا تتردد في عمل شوكة والبدء في اللعب بقاعدة الكود.
بالعودة إلى الكود الذي كتبناه للتو ، في نوع الجهاز الطرفي npm run test
. سيقوم بتنفيذ برنامج نصي والعثور على جميع الملفات التي تنتهي بها *.test.js
وتنفذها. بعد تنفيذه ، سترى رسالة مثل هذه:
Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total
الآن أعلم أن هذا ليس اختبارًا عمليًا للوحدة ، لكنني أردت أن يركز هذا البرنامج التعليمي على إعداد Jest & Enzyme فقط.
مرة أخرى هنا هو الكود المصدري لهذا البرنامج التعليمي .