Guia Guia de desenvolupament

Una bona vida comença amb la prova

Un programador que no escrigui casos de proves automàtics no és un bon enginyer de proves. Animem tots els projectes a establir casos de proves automàtics complets des del principi. Amb el desenvolupament del projecte, la inversió inicial es premiarà centenars de vegades.

Continuem l'exemple de la secció anterior i fem un cop d'ull a com utilitzar fibjs per escriure casos de prova.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
const http = require('http'); const path = require('path'); var hello_server = { '/:name(fibjs.*)': (req, name) => { req.response.write('hello, ' + name + '. I love you.'); }, '/:name': (req, name) => { req.response.write('hello, ' + name); } }; var root_server = { '/hello': hello_server, '/bonjour': hello_server, '*': http.fileHandler(path.join(__dirname, 'web')) }; var svr = new http.Server(8080, root_server); svr.start();

Un marc de prova buit

Comencem amb un marc bàsic de proves:

1 2 3 4 5 6 7 8 9 10
var test = require('test'); test.setup(); describe('hello, test', () => { it('a empty test', () => { }); }); test.run();

Deseu com test.jsmés endavant, a la línia d’ordres fibjs test.js, veureu la sortida següent, es va escriure un marc de prova bàsic.

1 2 3 4
hello, test √ a empty test √ 1 tests completed (0ms)

Inicieu el servidor de prova

Com que hem de provar el servidor http, primer hem d’iniciar el servidor. El cas de prova enviarà una sol·licitud al servidor i, a continuació, provarà el resultat de la sol·licitud per determinar si el servidor compleix els requisits:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
var test = require('test'); test.setup(); var http = require('http'); describe('hello, test', () => { it('hello, fibjs', () => { var r = http.get('http://127.0.0.1:8080/hello/fibjs'); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), 'hello, fibjs. I love you.'); }); }); test.run();

En aquest codi, jutgem si la lògica del servidor és normal comprovant si el resultat de http.get és el resultat que esperem. Segons aquest exemple, podem completar ràpidament un conjunt de proves i optimitzar el codi al mateix temps:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
var test = require('test'); test.setup(); var http = require('http'); function test_get(url, rep) { var r = http.get('http://127.0.0.1:8080' + url); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), rep); } describe('hello, test', () => { it('hello, fibjs', () => { test_get('/hello/fibjs', 'hello, fibjs. I love you.'); }); it('hello, fibjs*', () => { test_get('/hello/fibjs-great', 'hello, fibjs-great. I love you.'); }); it('hello, JavaScript', () => { test_get('/hello/JavaScript', 'hello, JavaScript'); }); it('hello, v8', () => { test_get('/hello/v8', 'hello, v8'); }); }); test.run();

Gestió grupal de casos d’ús

Afegim la prova de bonjour. Tot i que bonjour i hola són el mateix conjunt de serveis, perquè el camí ha canviat, també hem de verificar la correcta del servei. Aquesta vegada, per gestionar millor els casos d’ús, hem realitzat els casos de prova Agrupant, al mateix temps, perquè el contingut de la prova de hello i bonjour són els mateixos, hem optimitzat el codi de nou i hem provat els dos conjunts de serveis amb el mateix conjunt de codis:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
var test = require('test'); test.setup(); var http = require('http'); function test_get(url, rep) { var r = http.get('http://127.0.0.1:8080' + url); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), rep); } describe('hello, test', () => { function test_hello(hello) { describe(hello + ' test', () => { it('fibjs', () => { test_get('/' + hello + '/fibjs', 'hello, fibjs. I love you.'); }); it('fibjs*', () => { test_get('/' + hello + '/fibjs-great', 'hello, fibjs-great. I love you.'); }); it('JavaScript', () => { test_get('/' + hello + '/JavaScript', 'hello, JavaScript'); }); it('v8', () => { test_get('/' + hello + '/v8', 'hello, v8'); }); }); } test_hello('hello'); test_hello('bonjour'); }); test.run();

Mitjançant l'agrupació de casos d'ús, podem veure els resultats de les proves amb més claredat i també és fàcil saltar i provar un grup de casos d'ús individualment, accelerant el desenvolupament i la velocitat de la prova. Els següents són els resultats d'aquesta ronda de proves:

1 2 3 4 5 6 7 8 9 10 11 12 13
hello, test hello test √ fibjs √ fibjs* √ JavaScript √ v8 bonjour test √ fibjs √ fibjs* √ JavaScript √ v8 √ 8 tests completed (3ms)

Segons el disseny del nostre servidor, també tenim un conjunt de serveis de fitxers estàtics. Segons l'exemple anterior, crec que podeu escriure ràpidament aquesta part dels casos de prova.

Prova d’un clic

Després de la introducció anterior, podem establir ràpidament casos de prova. Però per utilitzar aquest script de prova, primer heu d’iniciar el servidor, és molt fàcil, volem executar-lo test.jsper completar la prova directament. Podem utilitzar el codi següent per aconseguir-ho:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
var test = require('test'); test.setup(); var http = require('http'); var coroutine = require('coroutine'); coroutine.start(() => { run('./main.js'); }); coroutine.sleep(100); function test_get(url, rep) { var r = http.get('http://127.0.0.1:8080' + url); assert.equal(r.statusCode, 200); assert.equal(r.data.toString(), rep); } describe('hello, test', () => { function test_hello(hello) { describe(hello + ' test', () => { it('fibjs', () => { test_get('/' + hello + '/fibjs', 'hello, fibjs. I love you.'); }); it('fibjs*', () => { test_get('/' + hello + '/fibjs-great', 'hello, fibjs-great. I love you.'); }); it('JavaScript', () => { test_get('/' + hello + '/JavaScript', 'hello, JavaScript'); }); it('v8', () => { test_get('/' + hello + '/v8', 'hello, v8'); }); }); } test_hello('hello'); test_hello('bonjour'); }); process.exit(test.run());

A la línia 6 a 10 d’aquest codi, hem afegit un main.jscodi d’ inici de paràgraf i esperem una mica i, a continuació, reinicieu les proves.

Comprovació de la cobertura del codi

Els bons casos de prova han de tenir en compte que els casos de prova han de cobrir totes les branques de l’empresa per assegurar-se que l’empresa s’executa correctament. En aquest moment, es poden fer controls de cobertura de codi per determinar si la prova està completa.

Aquest procés és molt senzill, només cal afegir el paràmetre --cov en fer la prova:

1
fibjs --cov test

Un cop finalitzada la prova, es generarà un fitxer de registre de fibjs-xxxx.lcov al directori actual. En aquest moment, cal analitzar el registre i generar un informe:

1
fibjs --cov-process fibjs-xxxx.lcov out

A continuació, podeu generar un conjunt d'informes d'anàlisi al directori de sortida. Introduïu el catàleg per comprovar, podeu veure la pàgina següent: cov Podeu veure que main.jsla cobertura del codi va arribar al 100%, cosa que significa que la prova cobreix completament la lògica empresarial. Feu clic a main.jscontinuació per veure un informe més detallat.

👉 [ Troba l'assassí de la performance ]