Hogyan tesztelheti Node.js alkalmazásait az Ava.js segítségével

Miért szeretne teszteseteket írni az alkalmazásokhoz? Nos, ez egy kérdés, amelyet számos fejlesztő megpróbál kitérni, pusztán azért, mert erőfeszítéseket és időt igényel, és mivel a manuális tesztelés sokkal kielégítőbb. Kattintson ... kattintson ... töltse ki az űrlapot ... Kattintson a ... Presto gombra. Az alkalmazásom működik, az API-k jók, minden vaskos.

Gyorsan előreléphet a napi majdnem 30 lekérési kérelem egyesítésével a fő ágba. Most, hogy érzed magad a 30 szolgáltatás manuális tesztelésével, vagy egy kódblokk visszafejlesztésével és más kód öntudatlan törésével?

Ezen a ponton általában azt mondod: "Bárcsak írnék néhány tesztesetet kezdetként." Tehát merítsen némi ihletet a Facebook-tól: itt egy nagyon klassz cikket osztottak meg, amely elmagyarázta, hogyan fejlesztette a csapat a React 16-ot tesztvezérelt fejlesztéssel.

A csomópont-alkalmazásokat önmagukban nagyon könnyű felépíteni. Sok a közösségi támogatás, és általában megkérdezi, amire szüksége van. A csomópontalkalmazások nagyszerű proxyszerverek lehetnek számos API-kiszolgálóhoz, ezáltal döntő fontosságúvá tehetik végpont-tesztelésüket.

Ebben a cikkben kitértem arra, hogyan állítsunk be és írhatunk alapegység teszt eseteket a Node.js alkalmazások lefedettségi jelentéseivel .Szóval ugorjunk be.

Szia Ava

Ava egy JavaScript tesztfutó. Kihasználja a Node aszinkron I / O jellegét, és párhuzamos teszteket futtat, ezzel jelentősen lerövidítve a tesztidőket.

Kezdjük el

Hozzon létre egy package.jsonfájlt a munka könyvtárában, és adja hozzá a következő csomagokat:

yarn add ava babel-register

Hozzon létre egy teszt mappát. Hasznos, ha a teszteket egy helyen tartja. Tarthat tesztmodulokat / vezérlőket is.

A frissítettnek package.jsonmost így kell kinéznie:

{ "name": "ava-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start" : "node server.js", "test": "node_modules/.bin/ava tests/**/*.test.js --verbose", "test:watch": "node_modules/.bin/ava --verbose --watch" }, "dependencies": { "ava": "^0.23.0", "babel-register": "^6.26.0" }, "ava": { "require": [ "babel-register" ] }}

A babel-registertranspiles ES6 kód futási esetén néhány gép fut egy régi Node változat, amely nem támogatja ES6. A verbosezászló ad néhány kimenetet, attól függően, hogy a tesztjeink sikertelenek-e vagy sikeresek-e. Ez a jelző nagyon hasznos a tesztek hibakeresése közben, de ha több száz tesztesetet írsz, érdemes kikapcsolni.

A tests/index.test.jskövetkezőbe felveheti az első tesztesetet:

Az Ava esetében hasznos, hogy lehetővé teszi az aszinkron tesztek futtatását az async várakozási funkciók segítségével. A szintaxis szintén meglehetősen egyértelmű. A terv módszer lehetővé teszi számunkra, hogy kifejezetten megemlítsük az állítások számát, amelyeket tesztenként szeretnénk megfogalmazni.

A yarn testkonzolról futva a következő kimenetet kapja:

Ha valamelyik tesztünk nem sikerül, a következőket kapjuk:

Ez a verbosemód szépsége . Megadja a tiszta hibakészletet és a veremkövetési szemetet egyikét sem. Ha futásidejű hibába ütközik, akkor néhány szép szintaxis kiemelés is látható lesz.

Valóban kihasználhatja az Ava API-t, és annak hatékony érvényesítési eszközével rugalmas teszteseteket írhat.

A Node szerver beállítása

Eddig csak a tesztek írásának alapvető beállításáról beszéltünk - és legyünk őszinték, ez elég egyenesen halad. Tehát ebben a részben elmagyarázom, hogyan lehet egy egyszerű Node kiszolgálót leválasztani és annak végpontjait az Ava segítségével tesztelni.

yarn add express body-parser 

A munkakönyvtárban hozzon létre egy, app.jsés adja hozzá a következő kódrészletet:

Az alkalmazásmodul exportálásának oka az, hogy az az ál-API szerverrel használható legyen, és Ava-nak futtatnia kell a teszteket.

Hozzon létre egy új fájlt, server.jsés importálja az alkalmazás modult a szerver indításához.

Az npm start futtatásával el kell indítania a szervert, és a // localhost / status végpontra való navigáláshoz 200OK választ kell adnia.

Nagyszerű, ezért szerverünk működik.

A kód gyors áttekintése azt mutatja, hogy 3 végpontot hoztunk létre: egy állapot-végpontot, egy üdvözlő-végpontot és egy regiszter-végpontot. Van némi érvényesítés a regiszter végpontján, amely 400-at (rossz kérés) dob, ha hiányoznak a törzsparaméterek. A fenti validálási módszer elég naiv, de a végpont tesztelés célját szolgálja - ezért maradok.

Pro tipp: Bármikor hozzárendelhet hibakezelést egy köztes programhoz, és a következővel használhatja a hibakezelő meghívását.

Írjunk még néhány tesztet a végpont körül. A legfelsőbb tesztet fogom használnimodul. Nagyon hasonlít a superagenthez: ugyanazokat az API-kat használja, és hasonló a szintaxisa. Szóval, nyerjen.

Importáltuk a korábban exportált appmodult, és átadtuk a supertestnek. A Supertest létrehoz egy proxykiszolgálót, amely eltalálja a tesztben említett összes végpont URL-t. Használhatja a deepEqualmódszert a teljes objektum tesztelésére, vagy a ismetódust az egyes mezők manuális tesztelésére.

A fonalpróba lefuttatása a következőket eredményezi:

Nagy. Négy tesztet írtunk, és mindannyian megfelelnek a vártnak. De mi a helyzet a kód lefedettségével?

Szia nyc

A szép lefedettségi jelentések létrehozásához a nyc-t fogjuk használni, amely az Istanbul.js parancssori felülete. Nagyon könnyen használható, és sok konfigurálható opcióval rendelkezik. Az egyszerűség kedvéért egy nagyon egyszerű konfigurációt fogunk használni.

yarn add nyc --save

Az nyc parancs szépen átfedi a tesztparancsot, és létrehoz egy lefedettségi mappát (ennek a gitignore-ban kell lennie) a munkakönyvtárban.

Frissítse az package.jsonalábbiak szerint:

{ "name": "ava-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "node_modules/.bin/ava tests/**/*.test.js --verbose", "test:watch": "node_modules/.bin/ava --verbose --watch", "cover": "node_modules/.bin/nyc yarn test", }, ... other dependencies "nyc": { "reporter": [ "lcov", "text", "html" ] }}

A kívánt riporter típusok a package.jsonfájl nyc szakaszában konfigurálhatók .

Futtassuk a fonalhuzatot:

Oké, így még nincs 100% -os lefedettség. Javítsuk ki. Először be akar lépni a munkakönyvtár lefedettségi mappájába, és megnézheti, hogy a kód mely része nem került lefedésre.

Nyilvánvalóan kihagytunk egy helyet. Tegyük fel az tests/index.tests.jsaktába az utolsó tesztesetet , amely a teljes app.jsfájlt lefedi .

test('Create a new user', async t => { let username = 'some-hase' const password = 'some-hase' const response = await request(app) .post('/register') .send({username, password});
t.is(response.status, 200); t.is(response.body.message, `new user created`);});

És most….

Gyors.

Szakértői tipp: Ha küszöbértéket szeretne hozzáadni a tesztesetekhez, hozzáadhat egy szkriptet a package.json fájljához.
"check-coverage": "node_modules/.bin/nyc check-coverage --lines 100 --functions 100 --branches 100 --statements 100"

This command can be run as part of your travis / gitlab pipeline build systems.

Conclusion

We’ve covered a basic setup with Ava for unit test cases of your Node APIs. The documentation is really extensive and can be referred to in case of doubt.

PS: Hope you like the article, correct me if I am wrong anywhere. Always welcome a discussion.