1. 程式人生 > >Node.js RESTful API和Express單元測試

Node.js RESTful API和Express單元測試

本文主要研究Node.js RESTful API和Express框架的單元測試。

關於Mocha和Istanbul的詳細使用,請參考:使用Mocha和Istanbul實現Node.js單元測試和覆蓋率

Github: https://github.com/prufeng/autotest-node

Install

npm i -D nyc
npm i -D mocha
npm i -D chai
npm i -D chai-http

Unit Test Spec

建立單元測試檔案app.spec.js。
chai主要用來測試HTTP request,done用來保證非同步測試完成之後mocha才返回結果。

let chai = require('chai');
let chaiHttp = require('chai-http');
let app = require('../app');

let should = chai.should();
chai.use(chaiHttp);

describe('App', () => {
    it('should respond status 200', (done) => {
      chai.request(app)
          .get('/')
          .end((err, res) => {
                res.
should.have.status(200); done(); }); }); it('should GET the users response', (done) => { chai.request(app) .get('/users') .end((err, res) => { res.should.have.status(200); res.text.should.equal('respond with a resource'
); done(); }); }); it('should respond status 404', (done) => { chai.request(app) .get('/wrongUrl') .end((err, res) => { res.should.have.status(404); done(); }); }); });

Run Test

package.json

-a用來覆蓋所有程式碼檔案,--recursive表示包含子目錄。

  "scripts": {
    "start": "node ./bin/www",
    "test": "nyc -a mocha --recursive"
  }

npm test

npm test
  App
GET / 200 527.550 ms - 170
    v should respond status 200 (550ms)
GET /users 200 1.022 ms - 23
    v should GET the users response
GET /wrongUrl 404 11.877 ms - 2583
    v should respond status 404

  Calculator
    add
      v add(1,2) should return 3
    minus
      v minus(1,2) should return -1

  Array
    #indexOf()
      v should return -1 when the value is not present


  6 passing (588ms)

-----------------|----------|----------|----------|----------|-------------------|
File             |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
-----------------|----------|----------|----------|----------|-------------------|
All files        |      100 |       50 |      100 |      100 |                   |
 autotest        |      100 |       50 |      100 |      100 |                   |
  app.js         |      100 |       50 |      100 |      100 |             34,37 |
  calc.js        |      100 |      100 |      100 |      100 |                   |
 autotest/routes |      100 |      100 |      100 |      100 |                   |
  index.js       |      100 |      100 |      100 |      100 |                   |
  users.js       |      100 |      100 |      100 |      100 |                   |
-----------------|----------|----------|----------|----------|-------------------|

Reference

https://scotch.io/tutorials/test-a-node-restful-api-with-mocha-and-chai
https://github.com/samuxyz/bookstore
https://github.com/chaijs/chai

文章目錄