node.js - 如何编写 Mocha 测试,其中一个测试取决于下一个测试的结果?

标签 node.js unit-testing express mocha.js

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();
  });
});

下次测试时如何获取client_id?

最佳答案

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

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

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

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

关于node.js - 如何编写 Mocha 测试,其中一个测试取决于下一个测试的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704206/

相关文章:

javascript - dust.js 包含部分内容而不进行 trim

javascript - 自动从nodejs和express中的文件夹中请求 "controllers"

java - 无法使用mockito对该方法中引发的异常进行单元测试

javascript - 如何对 API 调用进行单元测试并断言 React 和 Enzyme 中的状态更改?

javascript - 在 typescript 中使用express中的回调函数数组

javascript - 如何从关联模型中获取对象?

javascript - 我的应用程序找不到从 NPM 注册表下载的 TypeScript 包(未找到模块)

javascript - 你如何使用 "yarn create <pkg-name>"?

jquery - 如何在 github 存储库的子文件夹中搜索特定单词或条目

node.js - app.locals 和 res.locals 生命周期