【问题标题】:Why my Supertest test that should be failing is passing?为什么我应该失败的超测测试通过了?
【发布时间】:2016-01-02 21:47:14
【问题描述】:

我正在基于这个 repo 开始我的项目: https://github.com/madhums/node-express-mongoose

我决定做的第一件事是编写测试,所以我去了测试文件,它看起来像这样:

var mongoose = require('mongoose');
var should = require('should');
var request = require('supertest');
var app = require('../server');
var context = describe;
// other stuff you want to include for tests

before(function (done) {
  // clear db and other stuff
  done();
});

describe('Users', function () {
  describe('POST /users', function () {
    it('should create a user', function (done) {

      request(app)
      .post('/users')
      .field('name', 'foo')
      .field('email', 'foo')
      .field('password', 'foo')
      .expect('Content-Type', /json/)
      .expect(200)
      .end(function(err, res){
        console.log(err);
        if(err){
          console.log("error");
        }
        // console.log(res);
      });


      done();
    });
  });
});

after(function (done) {
  // do some stuff
  done();
});

我实际上并没有创建路由,所以测试应该失败了,我什至在 .end 上得到了一个错误,所以知道为什么测试没有失败吗?

当我运行 npm test 时,我的控制台会显示这个

Express app started on port 3000


  Users
    POST /users
      ✓ should create a user
[Error: expected "Content-Type" matching /json/, got "text/html; charset=utf-8"]
error


  1 passing (653ms)

【问题讨论】:

    标签: node.js express supertest


    【解决方案1】:

    问题是您的测试是异步的,但您的代码是同步的。具体来说,done() 行总是被调用。

    您需要将done() 行移动到.end 块中,并为错误情况添加done(err),如下所示:

    .end(function(err, res){
        if(err){
            console.log("error");
            done(err);
        }
        else {
            console.log(res);
            done();
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 2016-10-05
      相关资源
      最近更新 更多