【问题标题】:Mocha supertest integration test exits too soonMocha 超测集成测试退出太快
【发布时间】:2016-02-07 10:45:31
【问题描述】:

我正在为 Node.js 应用程序运行以下集成测试。第一个 API 已经存在,而第二个不存在:

'use strict';

var app = require('../..');
import request from 'supertest';                                                                                                                                        

describe('Planes API:', function() {

  describe('GET /api/planes/:name', function() {
    it('should contain a list of alive cells', function() {
      request(app)
        .get('/api/planes/a-block-and-bar')
        .expect(200)
        .expect('Content-Type', /json/)
        .end((err, res) => {
          console.log("getting here? 1");
          var plane = res.body;
          plane.aliveCells.length.should.equal(3);
        }); 
    }); 

    it('should load a specific generation', function() {
      request(app)
        .get('/api/planes/a-block-and-bar/generation/1')
        .expect(200)
        .expect('Content-Type', /json/)
        .end((err, res) => {
          console.log("getting here? 2");
          res.status.should.equal(200);
        }); 
    }); 
  }); 

});

然而,输出是:

[11:39:15][giorgio@Bipbip:~/code/game-of-life-javascript]$ grunt mochaTest:integration
Running "mochaTest:integration" (mochaTest) task


  Planes API:
Express server listening on 9000, in development mode
    GET /api/planes/:name
      ✓ should contain a list of alive cells
GET /api/planes/a-block-and-bar 200 6.082 ms - 58
getting here? 1
      ✓ should load a specific generation


  2 passing (94ms)

GET /api/planes/a-block-and-bar/generation/1 404 4.258 ms - -

Done, without errors.


Execution Time (2016-02-07 10:42:13 UTC)
loading tasks             220ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 14%
loading grunt-mocha-test   46ms  ▇▇▇▇ 3%
mochaTest:integration      1.3s  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 83%
Total 1.5s

所以测试给出了假阴性。输出显示 404 由 API 返回,但我无法通过使用 .expect() 指定 200 来使其失败。

为什么测试没有失败?请注意,getting here? 2 永远不会被打印出来。

【问题讨论】:

    标签: node.js mocha.js supertest


    【解决方案1】:

    我会尝试 it('should load a specific generation', function(done) { 然后在您的end 方法中调用done()。如果您的第二个日志从未打印过,则此异步测试应该会产生超时错误。我对 supertest 不熟悉,但似乎在404 的情况下不会触发。也许存在错误事件处理程序?

    【讨论】:

    • 添加done 作为函数的参数并在每次测试结束时调用它可以解决问题。如果您使用 1 或 0 个参数定义函数,Mocha 的行为似乎有所不同,鉴于 JavaScript 的动态类型,我不知道它是如何做到的。
    猜你喜欢
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2021-01-24
    • 2016-04-07
    • 2020-03-26
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多