Folien Code Quality & Testing

Folien Code Quality & Testing

React Best Practices 5 – Code Quality & Testing Timo Mämecke TH Köln // MI Master // Weaving the Web 25. Juni 2019 Inhalt Enforcing Code Style. Integration Testing. React Best Practices – Code Quality & Testing – 2 Enforcing Code Style React Best Practices – Code Quality & Testing – 3 Warum um Code Style kümmern? Jeder hat seinen eigenen Stil beim Schreiben von Code. Code Style kann zu unnötigen Diskussionen führen. Mancher Code Style ist anfälliger für Fehler. Dateien werden mit verschiedenen Stilen unübersichtlich. Code Changes werden unübersichtlich. ... React Best Practices – Code Quality & Testing – 4 Wie um Code Style kümmern? "Linting" Code Style Regeln für das Projekt festlegen. Regeln mit Tools prüfen. Unsauberer Code kann automatisch gefixt werden. React Best Practices – Code Quality & Testing – 5 Empfehlenswerte Tools eslint prettier Linter Code Formatter Code Quality Tool opinionated, nur komplett konfigurierbar teilweise konfigurierbar React Best Practices – Code Quality & Testing – 6 Empfehlenswerte Tools eslint prettier Linter Code Formatter Code Quality Tool opinionated, nur komplett konfigurierbar teilweise konfigurierbar Beide miteinander verbinden: �� React Best Practices – Code Quality & Testing – 7 Quick Guide 1 $ npm install -D prettier eslint babel-eslint eslint-config-prettier eslint-plugin-prettier - babel-eslint für Babel Syntax - eslint-config-prettier, eslint-plugin-prettier verbinden eslint und prettier 2 .prettierrc erstellen { "semi": false, "singleQuote": true } 3 .eslintrc erstellen { "parser": "babel-eslint", "env": { "browser": true }, "extends": ["eslint:recommended", "plugin:prettier/recommended"] } 4 $ npx eslint . React Best Practices – Code Quality & Testing – 8 Außerdem nützlich: - lint script zur package.json hinzufügen "npm run lint" statt "npx eslint ..." { "scripts": { "lint": "eslint ." } } - Linter zum Editor hinzufügen! - Linting mit Continuous Integration verbinden. React Best Practices – Code Quality & Testing – 9 Weitere Linting Regeln hinzufügen Von Anfang an empfehlenswert: - eslint-plugin-react - eslint-plugin-react-hooks Mein Vorgehen: Linting Regeln dann hinzufügen, wenn sie gebraucht werden. Möglich, mache ich aber nicht: weitere vordefinierte Regeln installieren - z.B. eslint-config-airbnb React Best Practices – Code Quality & Testing – 10 Integration Testing React Best Practices – Code Quality & Testing – 11 The Testing Trophy Wie viele Tests man schreiben sollte: * Siehe: https://twitter.com/kentcdodds/status/960723172591992832 React Best Practices – Code Quality & Testing – 12 The Testing Trophy Testing End to End Tests: langsam, aufwändig, sehr verlässlich Integration Tests: perfekte Mischung aus Aufwand und Verlässlichkeit Unit Tests: schnell, einfach, weniger verlässlich Linting schnell aufzusetzen vermeidet Syntaxfehler/-probleme * Siehe: https://twitter.com/kentcdodds/status/960723172591992832 React Best Practices – Code Quality & Testing – 13 React Best Practices – Code Quality & Testing – 14 React Best Practices – Code Quality & Testing – 15 Sinnvolle Integration Tests¹ Tests sollten nicht failen: durch internes Refactoring. Interne Logik testen sorgt für viele failing Tests bei Änderungen. Tests sollten failen: wenn sich für den User etwas geändert hat. Testen, was der Nutzer machen kann. Nur assertions auf Dinge, die sich für den Nutzer geändert haben. ...am besten direkt auf dem DOM! ¹ ... für React UIs React Best Practices – Code Quality & Testing – 16 react-testing-library React Components direkt im DOM¹ rendern. Echte User-Aktionen simulieren: - Klick auf einen Button - Eingabe von Text Assertion, was sich für den Nutzer geändert hat: - Loading-Spinner erscheint - Text ändert sich - Elemente hinzugekommen oder verschwunden * Siehe: https://github.com/testing-library/react-testing-library ¹ respektive JSDOM Implementation React Best Practices – Code Quality & Testing – 17 Beispiel: Button mit einem Counter. Der Counter startet bei 0 und erhöht sich bei Klick um 1. import React from 'react' import { render, fireEvent } from '@testing-library/react' import Counter from './Counter' test('count starts with 0', () => { const { getByTestId } = render(<Counter />) Was Nutzer initial sieht. expect(getByTestId('button')).toHaveTextContent(/0 times/) }) test('count increases by 1 after click', () => { Nutzer macht eine Aktion const { getByTestId } = render(<Counter />) und erwartet Änderung. fireEvent.click(getByTestId('button')) expect(getByTestId('button')).toHaveTextContent(/1 times/) }) React Best Practices – Code Quality & Testing – 18 tl;dr Code Style automatisch mit prettier¹ & eslint² prüfen. Prettier & eslint miteinander verbinden.³ Integration Tests bieten Sicherheit bei Änderungen. Tests so schreiben, wie sie den Nutzer betrefen. Dafür eignet sich react-testing-library⁴ ¹ https://prettier.io ² https://eslint.org ³ https://prettier.io/docs/en/integrating-with-linters.html#eslint ⁴ https://github.com/testing-library/react-testing-library React Best Practices – Code Quality & Testing – 19.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    19 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us