【问题标题】:learning testing in mocha with supertest. can't get test to fail用 supertest 在 mocha 中学习测试。不能让测试失败
【发布时间】:2025-12-10 01:50:01
【问题描述】:

我不知道怎么做,但我一生都无法弄清楚如何让这个测试失败。老实说,我真的不知道我在做什么,但是看到/fail 不存在并且我的所有路由都受到身份验证的保护,这导致GET /fail 401 测试应该失败,因为它看到expect(200)。那么这里发生了什么?

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

describe('Index Routes', function(done){
  it('should return 200 status code', function(done){
      agent.get('/').expect(500, done);
  });

  it('should fail horribly', function(done){
    agent.get('/fail').expect(200, done);
  })
});

输出:

> istanbul cover node_modules/mocha/bin/_mocha -x database.js

  Index Routes
[0mGET / [32m200 [0m374.389 ms - 170[0m

    1) should return 200 status code
[0mGET /fail [33m401 [0m1.723 ms - 21[0m

    √ should fail horribly


  1 passing (415ms)
  1 failing

  1) Index Routes should return 200 status code:
     Error: expected 500 "Internal Server Error", got 200 "OK"
      at Test._assertStatus (C:\Users\janedoe\WalkingApp-WebService\node_modules\supertest\lib\test.js:232:12)
      at Test._assertFunction (C:\Users\janedoe\WalkingApp-WebService\node_modules\supertest\lib\test.js:247:11)
      at Test.assert (C:\Users\janedoe\WalkingApp-WebService\node_modules\supertest\lib\test.js:148:18)
      at Server.assert (C:\Users\janedoe\WalkingApp-WebService\node_modules\supertest\lib\test.js:127:12)
      at emitCloseNT (net.js:1521:8)


=============================== Coverage summary ===============================
Statements   : 58.05% ( 101/174 )
Branches     : 6.25% ( 2/32 )
Functions    : 12.9% ( 4/31 )
Lines        : 61.59% ( 101/164 )
================================================================================

【问题讨论】:

    标签: node.js express mocha.js supertest


    【解决方案1】:

    原来这是我的身份验证问题。就像在我对Passport.js 的身份验证方法中将res.send().status(); 的顺序切换为res.status().send() 一样。

    【讨论】:

      【解决方案2】:

      这里是 res.status 方法的express v4 documentation。 res.status 是 Node 的 response.statusCode 的可链接别名。然后,您可以在之后链接发送功能。

      res.status(400).send('Bad Request');
      

      【讨论】: