# Gör egna test med Mocha
__
status: alpha
author: krm
created: 2022-12-19  
__

# 👁️‍🗨️ Om detta avsnitt

Vi gör ett enkelt exempel med "unit test". Har du använt mallen borde all program 
redan vara installerade. Vi utgår här från ett tänkt exempel där 
vi ska beräkna ett polynom.

# 🧭 Vad är "unit testing"?

Ett sätt att autimatisera testning av kod. Ett antal testfall som gås 
igenom automatikst och rapporterar om de klaras av.

# 📚 Vi behöver ett par packet installerade

Dessa är populära packet för unit testning på node.

- 🔗 [mocha](https://mochajs.org/)
- 🔗 [chi](https://www.chaijs.com/)

Finns installerade via mallen.

# 1. Skapa en test mapp

Skapa en mapp med namnet *test* om den inte redan finns.

```sh
mkdir test
```

# 2. Exportera

Se till att det du vill testa är exporterat. Oftast är det en 
funktion. Du lägger till *export* framför funktionen.

```js
export function polynomA(Xvalue) {
   return 3*Xvalue*Xvalue+2*Xvalue+1
}
```

# 3. Skapa en test fil

I mappen test, skapa en fil för testning. Vi skapar filen "polynomA.ts".


# 4. Importera "assert" från "chai"

Högst upp i filen importera assert.

```js
import { expect } from "chai";
```

Dett finns tre olika sätt att använda chai bibkloteket, du kan se om 
något av de andra passar dig bättre.


# ➕ 5. Installera plugin för "chai"

Det finns flera plugin för "chai", nedan installerar vi ett som gör det 
lätt att test strings.

```js
chai.use(chaiString);
import chaiString from "chai-string";

```

För att detta ska fungera måste "chai-string" var installerat i ditt 
projekt.

# 6. Importera det du vill testa

Högst upp i filen importera det du vill testa.

```js
import {polynomA} from "./polynoms"
```

# 7. Skriv kategorier för testet

Du kan forsätta genom att skap en underkategir till detta test. Vidare 
kan du lägga till kod som ska var gemnsam för alla test.

```js
describe("Polynom", () => {
  describe("Test of Polynom A", () => {
    CODE
  })
})
```

# 8. Börja skriva olika "assert"

I ditt test vill du kontroller att resultet från funktionen är 
korrekt. Vi gör det här med ett objekt som hetter assert. 

```js
  it("Controll result for zerro", () => {
     const result = polynomA(0);
     expect(result).equal(1);
  })
```

Observera att ett test kan ha flera olika assert.

# 8. Andra intressanta metoder i expext

Förutom testet ovan kan följande vara intressant:

- *deepEqual(expectet)* jämför arrayer och object för att se 
om de har samma data.
- *typeOf(expectet)* Ser om ett resultat har rätt typen 
du förväntate dig.

# ✔️ 9. Utför en kontroll av dina tester

Utgår du från mallen så ge kommandot nedan.

```sh
npm run test
```

# ❗ 10. Tänk på att

- Gör test varje gång du ändrar på din kod.
- Fixa eventuella problem som uppstår.
- Att göra en "pull request" med kod som inte klar testfallen kan ge 
dig väldigt dålig rykte på ditt jobb.
