【问题标题】:How do you structure the tests for your server applications in Node.js?您如何在 Node.js 中构建服务器应用程序的测试?
【发布时间】:2013-12-12 16:23:09
【问题描述】:

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

我的问题是:你如何构建你的测试,以免它变成一个你很快就会迷失的大文件?

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

而且这个测试甚至还没有涵盖所有情况。

我使用mocha,以及should 和expect 用于验证,superagent 用于API 调用。您将如何构建这些测试,使其不会演变成一个可怕的大文件?

【问题讨论】:

    标签: node.js testing mocha.js


    【解决方案1】:

    有很多方法可以将文件分解成更小、更易于管理的部分。他们中的大多数都围绕在mocha 中使用--recursive 标志。最后,这取决于个人选择以及对团队/个人有效的方法。

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

    运行不带--recursive 标志的mocha 并使用点符号命名您的文件。然后,您可以通过 HTTP 方法进一步分解它,如果您愿意,可以通过通过/失败进一步分解。例如,用户路由的文件名类似于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 功能时,这使得 grepping 个人测试变得轻而易举

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

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

    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:代码折叠

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

    【讨论】:

    • 我其实更喜欢第三个选项。我认为它可以在一个地方保留所有测试的良好索引,同时仍将所有特定内容保留在其他文件中。很好的答案,谢谢!
    • 这也是我使用的选项——原因与您提到的相同。我喜欢先写出我的整个规范,作为“预先计划”项目的一种方式。
    • 谢谢 - 选项 3 是迄今为止我最喜欢的......谢谢
    • 这对我也很有用。我更喜欢选项 3。谢谢
    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 2019-03-22
    • 2018-07-04
    • 2010-12-05
    • 2014-02-13
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多