如何在Node.js中为您的服务器应用程序构建测试?

时间:2013-12-12 16:23:10

标签: node.js testing mocha

我开始向我们的Node.js服务器应用程序添加测试,因为我们正在慢慢部署到生产环境中。我有一个API,有许多可能的测试请求。

我的问题是:你如何构建你的测试,这样它就不会成为你很快迷路的大文件?

我为一个 API路由编写了测试(我还有许多其他API路由要测试),这就是它的外观(在Sublime文件概述中):

code hell

此测试甚至还没有涵盖所有案例。

我正在使用mochashouldexpect进行验证,superagent进行API调用。你将如何构建这些测试,以便它不会在一个可怕的大文件中发展?

1 个答案:

答案 0 :(得分:26)

有很多方法可以将文件分解为更小,更易于管理的部分。他们中的大多数围绕--recursivemocha标志的使用进行调整。最后,这是个人选择的问题,也适用于团队/个人。

选项1:通过点表示法命名空间

运行mocha而不使用--recursive标记,并使用点表示法命名文件。然后,您可以通过HTTP方法进一步细分,如果您愿意,可以通过pass / fail进一步细分。例如,用户路由的文件名应为route.user.get.pass.js,并且位于test/文件夹的根目录中。该文件的代码如下所示:

describe('GET /users', function () {
  describe('when the request is valid', function () {
    it('should return 200 OK');
    it('should have unicorns');
    it('should have ponies too');
  });
});

然后另一个文件名为route.resource.post.fail.js的测试看起来像:

describe('POST /users', function () {
  describe('when the request is invalid', function () {
    it('should return 400 Bad Request');
    ...
  });
});

这使得在使用mocha的grep功能

时,轻击个人测试变得轻而易举

选项2:通过文件夹命名空间

与选项1类似,但是,在这种情况下,您将在运行--recursive时使用mocha标志并使用文件夹而不是嵌套文件名。

test/
  routes/
    users/
      post.js
      get.js
      put.js
  models/
    User.js

选项3:使用模块分开

这种方法是前两种方法的组合,应该在没有--recursive标志的情况下运行。在test目录的根目录中,您可以将规范文件命名为routes.userSpec.js,代码如下:

describe('/users', function () {

  describe('GET', function () {

    var tests = require('./users/get');

    it('should return 200 OK', tests.200);
    it('should have unicorns', tests.unicorns);
    it('should have ponies too', tests.ponies);

  });

  describe('POST', function () {

    var tests = require('./users/post');

    it('should return 200 OK', tests.200);
    it('should create unicorns', tests.unicorns);
    it('should create ponies too', tests.ponies);

  });

});

然后你会在test/users文件夹中定义模块,如下所示:

test/
  users/
    get.js
    post.js
  routes.userSpec.js

选项4:代码折叠

有时大文件是不可避免的,这就是所有优秀文本编辑器都具有代码折叠功能的原因。