Skip to content

Latest commit

 

History

History
93 lines (65 loc) · 3.09 KB

typescript.md

File metadata and controls

93 lines (65 loc) · 3.09 KB

Nota del traduttore

Questa è la traduzione del file typescript.md. Qui c'è il link dove si confrontano le differenze tra commit di riferimento di questa traduzione e l'ultimo commit di AVA sul branch master (Se si clicca sul link, e non si vede il file typescript.md nella lista dei file modificati, questa traduzione è aggiornata).


TypeScript

Traduzioni: Español, Français, Italiano, Русский, 简体中文

AVA è dotato nativamente con un file definitione TypeScript. Questo permette agli sviluppatori di utilizzare TypeScript per scrivere i test.

Configurazione

Come prima cosa installa il TypeScript (se è già installato, controlla che la versione sia 2.1 o successiva).

$ npm install --save-dev typescript

Crea un file tsconfig.json. Questo file serve per le opzioni del compilatore richieste per la compilazione del progetto o dei file di test.

{
	"compilerOptions": {
		"module": "commonjs",
		"target": "es2015"
	}
}

Aggiungi uno script test nel file package.json. Questo servirà a compilare prima il progetto e poi eseguire AVA.

{
  "scripts": {
    "test": "tsc && ava"
  }
}

Aggiungi i test

Crea un file test.ts.

import test from 'ava';

async function fn() {
    return Promise.resolve('foo');
}

test(async (t) => {
    t.is(await fn(), 'foo');
});

Attivare context

Il tipo predefinito di t.context è any. AVA espone un'interfaccia RegisterContextual<T> da utilizzare per applicare il tipo specifico a t.context. Questo può aiutare a rintracciare errori a tempo di compilazione:

import * as ava from 'ava';

function contextualize<T>(getContext: () => T): ava.RegisterContextual<T> {
	ava.test.beforeEach(t => {
		Object.assign(t.context, getContext());
	});

	return ava.test;
}

const test = contextualize(() => ({ foo: 'bar' }));

test.beforeEach(t => {
	t.context.foo = 123; // error:  Type '123' is not assignable to type 'string'
});

test.after.always.failing.cb.serial('very long chains are properly typed', t => {
	t.context.fooo = 'a value'; // error: Property 'fooo' does not exist on type '{ foo: string }'
});

test('an actual test', t => {
	t.deepEqual(t.context.foo.map(c => c), ['b', 'a', 'r']); // error: Property 'map' does not exist on type 'string'
});

Esegui i test

$ npm test