新手求教,如何使用Nodejs给Express网页应用编写单元测试以及代码覆盖率测试?有没有比较简单的例子可供参考吗?

发布于 1周前 作者 bupafengyu 来自 nodejs/Nestjs

新手求教,如何使用Nodejs给Express网页应用编写单元测试以及代码覆盖率测试?有没有比较简单的例子可供参考吗?
之前在 Google 里搜索过一些教程,不过好像很多都比较偏 RESTful API 相关,而且好像没有比较直观明了的案例。

11 回复

mocha + istanbul + should + 任何一个你用的习惯的 Node HTTP 库


相当于先启动 Web 服务器,然后通过 request 之类的库一个个访问地址进行测试吗?

当然是这样喵……

如果是 express 的话有一个配套的测试库,不过名字忘了。其实测试也分很多,像你提到的开 request 去测试属于功能测试而不是单元测试。

我记得像 Mocha 还有 Istanbul 都有非官方开发的 Express 中间件,但是这样只能用在人工测试环境,不方便用在 CI 上

顺便现在都在用 koa@next 做开发了喵~ express 暂时都没在用了喵~

楼主想进行哪种测试? 一种测试是测试页面的功能,比如点击按钮背景变色这种.  另一种是测试 api ,比如向哪个地址发请求应该返回什么东西. 这两种方法是不一样的.

这是我之前用 Node.js 写的网页应用: https://github.com/DoraJDJ/project-television
最近开了 Greenkeeper 后,每次提醒依赖更新的时候都会提醒 Untested (未测试),这样我就不能确定依赖更新后程序还能不能用。
所以我想弄个应用测试,这样每次依赖更新的时候就能进行自动化的测试,以确定会不会出问题。

你这个前后端都要做测试了
前端测试用可以直接上 headless browser, jasmine, casperjs 或者 seleuim 都可以,试一试.
后端测试相对简单些,楼上说的都可以.

如果不知道怎么开始的话可以看我之前造过的两个简单轮子, 都托管在 travis-ci 上了
https://github.com/flowmemo/can-i-reach-google 前端测试, 用的 casperjs.
https://github.com/flowmemo/koa-httpany 这个有后端测试,有代码覆盖率统计.

这两个都非常简单,估计你看一下就知道对测试有个概念了.

说错了 jasmine 不是 headless browser ,剩下几个是才是

针对你提出的问题,以下是一个简单的示例,展示如何使用Node.js为Express网页应用编写单元测试以及代码覆盖率测试。

单元测试

  1. 安装依赖

    使用Mocha和Chai进行单元测试,使用SuperTest模拟HTTP请求。

    npm install --save-dev mocha chai supertest
    
  2. 编写测试

    创建一个测试文件,例如app.test.js,并编写以下测试代码:

    const request = require('supertest');
    const app = require('../app'); // 引入你的Express应用
    
    describe('GET /', function() {
      it('should respond with 200 and HTML', function(done) {
        request(app)
          .get('/')
          .expect('Content-Type', /text\/html/)
          .expect(200, done);
      });
    });
    
  3. 运行测试

    package.json中添加测试脚本,然后运行npm test

    "scripts": {
      "test": "mocha"
    }
    

代码覆盖率测试

  1. 安装Istanbul

    npm install --save-dev istanbul
    
  2. 生成覆盖率报告

    package.json中添加覆盖率测试脚本,然后运行npm run test-cov

    "scripts": {
      "test-cov": "istanbul cover node_modules/mocha/bin/_mocha"
    }
    

这样,你就可以为Express网页应用编写单元测试并生成代码覆盖率报告了。以上示例仅供参考,你可以根据自己的需求进行调整和扩展。

回到顶部