如何编写mocha测试,其中一个测试取决于下一个测试的结果?

Sha*_*oon 1 unit-testing mocha.js node.js express

describe("Company Controller", function() {
  var apiUrl;

  beforeEach(function(done) {
    apiUrl = "http://localhost:3001";

    done();
  });

  it('should register a client without error and return an API key', function(done) {
    request({
      uri: apiUrl + '/api/v1/company',
      method: 'POST',
      json: true,
      form: {
        name: 'My Company'
      }
    }, function(err, res, body) {
      should.not.exist(err);
      res.statusCode.should.eql(200);
      body.status.should.eql('ok');
      should.exist(body.company.api_key);
      done();
    });
  });

  it('should generate a new API key for a company', function(done) {
    // NEED THE client_id generated in the previous test

  });

  after(function(done) {
    Company.remove().exec();
    done();
  });
});
Run Code Online (Sandbox Code Playgroud)

如何在下一次测试中获得client_id?

小智 7

一般来说,进行副作用测试是一种脆弱的做法.经常这样做,你会开始遇到一些非常难以调试的错误,即使每个测试都是孤立运行的,你的测试套件也会失败,并且错误消息不会有任何帮助.理想情况下,每个测试都应该"离开露营地"处于它发现的相同状态.

如果你真的坚持这样做,你当然可以设置一个全局变量.其他一些选择包括:

  • 合并两个测试.是的,这违反了一些人持有的单次断言的原则,但我认为避免副作用原则胜过一个原则.

  • 将注册放在beforeEach函数中.是的,通过这样做,您将在每个测试套件运行中注册多个客户端.这仍然是我的首选方法.