【问题标题】:Node.js + Chai/Mocha/Should: running multiple tests against the same responseNode.js + Chai/Mocha/Should:针对同一个响应运行多个测试
【发布时间】:2015-01-21 16:16:42
【问题描述】:

我正在使用与以下非常相似的东西来使用 Mocha 执行一系列 API 测试。这很好,但它需要为每个测试进行单独的 API 调用。 我想使用相同的 API 调用并针对该响应运行多个测试。我一直在阅读您可以使用 before 来执行此操作,但网络上的示例都没有实际显示它处理 API 调用?

var chai = require('chai');
var request = require('request');
var async = require('async');
var assert = chai.assert,
    expect = chai.expect,
    should = chai.should();

describe('/', function () {
  it('should return 200', function (done) {
    request.get('http://localhost:8000', function (err, res, body) {
      res.should.have.status(200);
      done();
    });
  });

  it('should say "Hello, world!"', function (done) {
    request.get('http://localhost:8000', function (err, res, body) {
      body.should.have.property('type', 'aType');
      done();
    });
  });
});

【问题讨论】:

    标签: javascript node.js mocha.js chai should.js


    【解决方案1】:

    你可以像这样使用before 函数来做到这一点......

    var chai = require('chai');
    var request = require('request');
    var async = require('async');
    var assert = chai.assert,
        expect = chai.expect,
        should = chai.should();
    
    describe('/', function () {
      var firstRequest;
    
      before(function(done) {
        request.get('http://localhost:8000', function(err, res, body) {
          firstRequest = {
            err:err,
            res:res,
            body:body
          };
          done();
        });
      });
    
      it('should return 200', function (done) {
        firstRequest.res.should.have.status(200);
        done();
      });
    
      it('should say "Hello, world!"', function (done) {
        firstRequest.body.should.have.property('type','aType');
        done();
      });
    });
    

    但是,除非您有充分的理由这样做,否则我认为您最好将测试结合起来。

    var chai = require('chai');
    var request = require('request');
    var async = require('async');
    var assert = chai.assert,
        expect = chai.expect,
        should = chai.should();
    
    describe('/', function () {
      it('should return 200 and say "Hello, world!"', function (done) {
        request.get('http://localhost:8000', function (err, res, body) {
          res.should.have.status(200);
          body.should.have.property('type', 'aType');
          done();
        });
      });
    });
    

    如果测试失败,即使有两个断言,Mocha 也会报告失败的具体原因。

    【讨论】:

    • 想过这样做,但是当我有 10 个左右的身体断言时,试图描述正在发生的事情真的很难看。希望有一个干净的测试列表和适用的描述。
    • 奇怪的是 should.have.status 这样做似乎不太好 - 不知道为什么。希望我能弄明白,哈哈!
    • 只有一个更新:如果您只是检查响应,则在测试中不需要done。在您的第一个示例中,it() 子句中没有任何异步发生。
    • 另外,我倾向于将它们分开(你的第一种风格),因为这样更容易隔离问题,例如如果某个部分发生故障,它是一个单独的it(should),因此更容易用it.only() 隔离和调试
    • @deitch 不错的电话,我从网上复制了该代码,但没有注意到。
    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 2019-06-28
    • 2017-11-06
    • 2018-11-05
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多