Bandymas, nors ir gali užtrukti daug laiko, yra svarbus bet kurios programos kūrimo ciklo žingsnis. Tai užtikrina, kad klaidas ir problemas pastebėsite anksti, prieš siunčiant kodą į gamybinę versiją.

Norėdami išbandyti „Express Rest“ API, galite naudoti „Jest“. Sukūrę paprastą CRUD API, sužinokite, kaip parašyti kiekvieno galutinio taško testus.

Kas yra Jestas?

Yra daug „JavaScript“ testavimo bibliotekų, kurias galite pasirinkti, tačiau Juokas yra lengviausia pradėti. Tai „Facebook“ sukurta testavimo biblioteka, dažniausiai naudojama „React“ projektams išbandyti. Tačiau taip pat galite jį naudoti norėdami išbandyti Node ir kitus JavaScript pagrįstus projektus. Jis buvo sukurtas naudojant Jasmine, kitą testavimo įrankį, ir pateikiamas kartu su savo tvirtinimo biblioteka.

Nors jums nereikės tvirtinimo bibliotekos, kad galėtumėte rašyti testus „Jest“, turėsite naudoti įrankį HTTP užklausoms pateikti. Šiame straipsnyje naudojamas SuperTest.

Kas yra SuperTest?

Supertestas yra HTTP skambučių mazgo testavimo biblioteka. Tai išplečia superagento testavimo biblioteką ir leidžia pateikti užklausas, pvz., GET, POST, PUT ir DELETE.

instagram viewer

SuperTest suteikia užklausos objektą, kurį galite naudoti HTTP užklausoms pateikti.

konst prašymas = reikalauti(„supertestas“)
prašymas ("https://icanhazdadjoke.com")
.get('/slack')
.pabaiga(funkcija(klaida, ats) {
jeigu (klaida) mesti klysti;
konsolė.log(res.kūnas.priedai);
});

Čia jūs perduodate pagrindinį API URL užklausos objektui ir susiejate HTTP metodą su likusiu URL. The pabaiga() metodas iškviečia API serverį, o atgalinio skambinimo funkcija apdoroja jo atsakymą.

Gavę atsakymą iš API, galite jį patvirtinti naudodami „Jest“.

Sukurkite Express API

Norėdami išbandyti savo API galinius taškus, turite sukurti REST API Pirmas. API, kurią sukursite, yra gana paprasta. Jis įterpia, nuskaito, atnaujina ir ištrina elementus iš masyvo.

Pradėkite sukurdami naują katalogą, vadinamą node-jest, ir inicijuodami npm.

mkdir node-jest
npm init -y

Tada sukurkite naują failą pavadinimu index.js ir sukurti Express serverį.

konst išreikšti = reikalauti(„išreikšti“)
konst programa = express ()
app.klausytis (3000, () => console.log("Klausymas per prievadą 3000"))

Išbandykite GET /todos galinį tašką

Pirmasis galutinis taškas, kurį sukursite, yra GET /todos galutinis taškas. Jis grąžina visus masyvo elementus. Index.js pridėkite toliau nurodytus dalykus.

konst todos = [
];
// Gauti visus darbus
app.get("/todos", (req, res) => {
grąžintires.statusas(200).json({
duomenys: todos,
klaida: nulinis,
});
});

Atminkite, kad atsakymo būsenos kodas yra 200 ir JSON objektas, kuriame yra užduočių elementas masyve, vadinamame duomenimis, ir klaidos pranešimas. Tai išbandysite naudodami Jest.

Dabar įdiekite „Jest“ ir „SuperTest“:

npm diegti juokingas supertestas

Tada pridėkite bandomąjį scenarijų package.json taip:

{
"scenarijus": {
"bandymas": "pokštas"
}
}

Prieš pradėdami rašyti savo testus, turėtumėte suprasti, kaip parašyti pagrindinį testą „Jest“.

Apsvarstykite šią funkciją:

funkcijasuma(a, b) {
grąžinti a + b;
}
modulis.eksportas = suma;

Bandomajame faile turite:

  • Importuokite funkciją.
  • Aprašykite, ką turi daryti testas.
  • Iškvieskite funkciją.
  • Patvirtinkite laukiamą atsakymą su tikruoju funkcijos atsakymu.
konst {suma} = reikalauti("./suma")
apibūdinti("Dviejų elementų suma", async() => {
testas ("Jis turėtų grįžti 4", () => {
tikėtis(suma(2,2)).būti(4)
})
})

The apibūdinti raktinis žodis nurodo testų grupę ir bandymas teiginys nurodo konkretų testą. Jei iš funkcijos grąžinta reikšmė sutampa su perduodama į būti, testas išlaikytas.

Bandydami API galinius taškus, jūs neiškviesite funkcijos, o siųsite užklausą naudodami SuperTest arba kitą HTTP kliento biblioteką.

Grįžę į GET galutinį tašką, sukurkite naują failą pavadinimu api.test.js. Čia rašysite visus galutinio taško testus. Bandomojo failo pavadinimas su a .testas infix užtikrina, kad Jest atpažins jį kaip bandomąjį failą.

Į api.test.js importuokite supertestą ir nustatykite bazinį URL taip:

konst prašymas = reikalauti(„supertestas“)
konst baseURL = "http://localhost: 3000"

Tada sukurkite pirmąjį testą aprašo bloke:

apibūdinti("GET /todos", () => {
konst newTodo = {
id: kriptovaliuta.randomUUID(),
prekė: "Gerk vandenį",
baigtas: klaidinga,
}
prieš visus (async () => {
// nustatyti užduotį
laukti užklausos (baseURL).post("/todo".send (newTodo);
})
po visko(async () => {
laukti užklausa (baseURL).delete(`/todo/${newTodo.id}`)
})
tai ("turėtų grąžinti 200", asinchroninis () => {
konst atsakymas = laukti užklausa (baseURL).get("/todos");
tikėtis(atsakymą.statusCode).būti(200);
tikėtis(atsakymą.kūnas.klaida).būti(nulinis);
});
tai ("turėtų grįžti prie todos", asinchroninis () => {
konst atsakymas = laukti užklausa (baseURL).get("/todos");
tikėtis (response.body.data.length >= 1).būti(tiesa);
});
});

Prieš vykdydami testus turėsite apibrėžti sąrankos ir išardymo funkcijas. Šios funkcijos užpildys todo masyvą elementu prieš bandymą ir ištrins netikrus duomenis po kiekvieno bandymo.

Kodas, kuris veikia prieš visus testus, yra funkcijoje beforeAll (). Kodas, kuris veikia po visų testų, yra funkcijoje afterAll ().

Šiame pavyzdyje jūs tiesiog paspaudžiate kiekvieno POST ir DELETE galinius taškus. Tikroje programoje tikriausiai prisijungtumėte prie netikros duomenų bazės, kurioje yra bandymo duomenys.

Atlikdami šį testą pirmiausia pateikėte užklausą GET /todos galutiniam taškui ir palyginote išsiųstą atsakymą su laukiamais rezultatais. Šis testų rinkinys bus išlaikytas, jei atsakymas bus HTTP būsenos kodas 200, duomenys nėra tušti, o klaidos pranešimas yra nulis.

Išbandykite POST /todo galinį tašką

Index.js sukurkite POST /todo galinį tašką:

app.post("/todo", (req, res) => {
bandyti {
konst { ID, elementas, baigtas } = req.body;
konst newTodo = {
ID,
daiktas,
baigtas,
};
todos.stumti(newTodo);
grąžintires.statusas(201).json({
duomenys: todos,
klaida: nulinis,
});
} sugauti (klaida) {
grąžintires.statusas(500).json({
duomenys: nulinis,
klaida: klaida,
});
}
});

Atliekant šį testą, užklausos turinyje turėsite išsiųsti išsamią užduoties informaciją naudodami siuntimo () metodą.

užklausa (baseURL).post("/todo").send (newTodo)

POST /todo užklausa turėtų grąžinti 201 būsenos kodą ir todos masyvą, kurio pabaigoje pridėtas naujas elementas. Štai kaip gali atrodyti testas:

apibūdinti("POST /todo", () => {
konst newTodo = {
// daryti
}
po visko(async () => {
laukti užklausa (baseURL).delete(`/todo/${newTodo.id}`)
})
tai ("turėtų pridėti elementą į todos masyvą", asinchroninis () => {
konst atsakymas = laukti užklausa (baseURL).post("/todo").send(newTodo);
konst lastItem = atsakas.body.data[response.body.data.length-1]
tikėtis(atsakymą.statusCode).būti(201);
tikėtis(paskutinis elementas.elementas).būti(newTodo["prekė"]);
tikėtis(paskutinis elementas.baigta).būti(newTodo["užbaigta"]);
});
});

Čia jūs perduodate todo duomenis metodui send () kaip argumentą. Atsakyme turi būti 201 būsenos kodas ir visi duomenų objekto todo elementai. Norėdami patikrinti, ar todo iš tikrųjų buvo sukurtas, patikrinkite, ar paskutinis grąžintų užduočių įrašas atitinka tą, kurį atsiųsite užklausoje.

PUT /todos/:id galutinis taškas turėtų grąžinti atnaujintą elementą:

app.put("/todos/:id", (req, res) => {
bandyti {
konst id = req.params.id
konst todo = todos.find((todo) => todo.id == id);
if(!todo) {
mestinaujasKlaida("Todo nerasta")
}
todo.completed = req.body.completed;
grąžintires.statusas(201).json({
duomenys: todo,
klaida: nulinis,
});
} sugauti (klaida) {
grąžintires.statusas(500).json({
duomenys: nulinis,
klaida: klaida,
});
}
});

Išbandykite atsakymą taip:

apibūdinti("Atnaujinkite vieną užduotį", () => {
konst newTodo = {
// daryti
}
prieš visus (async () => {
laukti užklausos (baseURL).post("/todo".send (newTodo);
})
po visko(async () => {
laukti užklausa (baseURL).delete(`/todo/${newTodo.id}`)
})
tai ("turėtų atnaujinti elementą, jei jis yra", asinchroninis () => {
konst atsakymas = laukti užklausa (baseURL).put(`/todos/${newTodo.id}`).send({
baigtas: tiesa,
});
tikėtis(atsakymą.statusCode).būti(201);
tikėtis(atsakymą.kūnas.duomenys.baigta).būti(tiesa);
});
});

Užbaigta reikšmė atsakymo turinyje turi būti teisinga. Nepamirškite į URL įtraukti elemento, kurį norite atnaujinti, ID.

Išbandykite DELETE /todos/:id galinį tašką

Index.js sukurkite galutinį tašką DELETE. Jis turėtų grąžinti todo duomenis be ištrinto elemento.

app.delete("/todos/:id", (req, res) => {
bandyti {
konst id = req.params.id
konst todo = todos[0]
if (todo) {
todos.sujungti(id, 1)
}
grąžintires.statusas(200).json({
duomenys: todos,
klaida: nulinis,
});
} sugauti (klaida) {
grąžintires.statusas(500).json({
duomenys: nulinis,
klaida: klaida,
});
}
});

Norėdami patikrinti galinį tašką, galite patikrinti, ar ištrintas elementas vis dar yra grąžinamuose duomenyse:

apibūdinti("Ištrinkite vieną užduotį", () => {
konst newTodo = {
// daryti
}
prieš visus (async () => {
laukti užklausos (baseURL).post("/todo".send (newTodo);
})
tai ("turėtų ištrinti vieną elementą", asinchroninis () => {
konst atsakymas = laukti užklausa (baseURL).delete(`/todos/${newTodo.id}`);
konst todos = atsakas.kūno.duomenys
konst egzistuoja = todos.find (todo => {
newTodo.id == todoId
})
tikėtis (egzistuoja).toBe(neapibrėžtas)
});
});

Iš DELETE galutinio taško grąžintuose duomenyse neturėtų būti ištrinto elemento. Kadangi grąžinami elementai yra masyve, galite naudoti Array[id], kad patikrintumėte, ar API teisingai ištrynė elementą. Rezultatas turėtų būti klaidingas.

REST API kūrimas

Šiame straipsnyje sužinojote, kaip išbandyti Express Rest API naudojant Jest API. Parašėte GET, PUT, POST ir DELETE HTTP užklausų testus ir matėte, kaip URL ir užklausoje siųsti duomenis į galutinį tašką. Turėtumėte turėti galimybę pritaikyti šias žinias bandydami savo Rest API.