Automata tesztben ne hívd a Számlázz.hu-t. A tesztfiók 10 percenként legfeljebb 500 számlát enged, a hálózat lassú és kiszámíthatatlan, és egy elrontott teszt éles fiókon valódi számlát állít ki. Erre való a createMockKassza(): ugyanazt a Kassza felületet adja, mint a createKassza(), de nem hív hálózatot, és nem kell hozzá Agent kulcs.
A mock ugyanazt a kliensoldali validációt és kerekítést futtatja, mint az éles kliens. Egy ismeretlen áfakulcs vagy egy kisbetűs nyugta előtag itt is validation hibát dob, a fenti számla bruttó összege pedig itt is 11 980 Ft.
Mock kliens tesztekhez
createMockKassza: hívásnapló, bizonylatok, és szimulált hálózati hiba.
A mockot csak akkor tudod átadni, ha a kódod nem maga hozza létre a klienst. A legegyszerűbb, ha a számlázó függvény paraméterben kapja meg a Kassza típusú klienst:
Egy mock példányt a fájl tetején hozol létre, és minden teszt előtt a reset() kiüríti a hívásnaplót, a bizonylatokat, a beállított hibákat és a sorszámokat.
lib/szamlazas.test.ts
import { SzamlazzError } from 'kassza'import { createMockKassza } from 'kassza/testing'import { beforeEach, describe, expect, test } from 'vitest'import { type Rendeles, szamlazRendelest } from './szamlazas'const kassza = createMockKassza({ now: () => new Date('2026-09-17T10:00:00Z') })const rendeles: Rendeles = { id: 1001, vevo: { name: 'Nagy Péter', zip: '1111', city: 'Budapest', address: 'Fő utca 1.' }, vegosszeg: 12_700,}beforeEach(() => kassza.reset())describe('szamlazRendelest', () => { test('egy rendelésre csak egy számlát állít ki', async () => { const elso = await szamlazRendelest(kassza, rendeles) const masodik = await szamlazRendelest(kassza, rendeles) expect(elso).toBe('E-KASSZA-2026-1') expect(masodik).toBe(elso) expect(kassza.calls.filter((hivas) => hivas.method === 'invoices.create')).toHaveLength(1) expect(kassza.invoiceRecords.get(elso)?.details.totals.grossAmount).toBe(12_700) }) test('hálózati hibánál továbbdobja a hibát, ha nem készült számla', async () => { kassza.failNext('invoices.create') await expect(szamlazRendelest(kassza, rendeles)).rejects.toMatchObject({ category: 'network' }) expect(kassza.invoiceRecords.size).toBe(0) }) test('fiókhibánál nem kérdez le újra', async () => { kassza.failNext( 'invoices.create', new SzamlazzError('[136] Lejárt előfizetés', { category: 'account', code: 136 }), ) await expect(szamlazRendelest(kassza, rendeles)).rejects.toMatchObject({ code: 136 }) expect(kassza.calls.map((hivas) => hivas.method)).toEqual(['invoices.get', 'invoices.create']) })})
Ha a kódod egy modul szintű klienst importál, a Vitest vi.mock() függvényével cserélheted mockra. A gyár függvényben dinamikusan importáld a kassza/testing modult, mert a vi.mock() a fájl importjai elé kerül:
lib/webhook.test.ts
import type { MockKassza } from 'kassza/testing'import { beforeEach, expect, test, vi } from 'vitest'import { kassza } from './kassza'import { webhookKezelo } from './webhook'vi.mock('./kassza', async () => { const { createMockKassza } = await import('kassza/testing') return { kassza: createMockKassza() }})const mock = kassza as MockKasszabeforeEach(() => mock.reset())test('a fizetési webhook számlát állít ki', async () => { await webhookKezelo({ rendelesId: 1001 }) expect(mock.calls.map((hivas) => hivas.method)).toContain('invoices.create')})
Itt a ceg.valid értéke true, az ismeretlen értéke { valid: false, addresses: [] }, a kulcsJo pedig false. A defaults miatt a következő számla száma E-WEB-2026-1 lesz.
Új E-STORNO-2026-1 számla, az eredetin reversed: true
Nyugtaszám
NYGT-2026-1, sztornónál NYGT-STORNO-2026-1
PDF
A MOCK_PDF néven exportált minimális PDF, ha a downloadPdf nincs kikapcsolva
Befizetés
A registerPayment hozzáad vagy felülír, a hátralékot a bruttó végösszegből számolja
Nem létező számla
[7], not_found, a findnull-t ad
Nem létező díjbekérő törlése
[335], not_found
Ismételt nyugta callId
[338], duplicate
Nem létező nyugta
[339], not_found, a findnull-t ad
Kiállított számla fejléce
test: true, eladó: Kassza Teszt Kft.
A mock nem ellenőrzi a rendelésszám ismétlődését (71, 152), a fiókban nem regisztrált előtagot (202) és a fiók állapotát, és e-mailt sem küld. Ezeket az eseteket a failNext() második paraméterében adott SzamlazzError-ral szimuláld.
A failNext() a bizonylat létrehozása előtt dob, így a hibára futott hívás a mockban nem hoz létre számlát. Azt az esetet, amikor a számla a hiba ellenére elkészült (például [56]), egy csomagoló klienssel teszteled, amely előbb kiállítja a számlát, és csak utána dob:
lib/szamlazas.test.ts
import { type Kassza, SzamlazzError } from 'kassza'import { createMockKassza } from 'kassza/testing'import { expect, test } from 'vitest'import { szamlazRendelest } from './szamlazas'test('részleges siker után nem állít ki új számlát', async () => { const mock = createMockKassza() const kassza: Kassza = { ...mock, invoices: { ...mock.invoices, create: async (input) => { await mock.invoices.create(input) throw new SzamlazzError('[56] Az értesítő e-mail nem ment ki.', { category: 'partial_success', code: 56, }) }, }, } const szamlaszam = await szamlazRendelest(kassza, { id: 1002, vevo: { name: 'Nagy Péter', zip: '1111', city: 'Budapest', address: 'Fő utca 1.' }, vegosszeg: 12_700, }) expect(mock.invoiceRecords.has(szamlaszam)).toBe(true) expect(mock.invoiceRecords.size).toBe(1)})