【问题标题】:sails js unit testing帆js单元测试
【发布时间】:2015-07-01 08:19:37
【问题描述】:

我创建了一个sails js 应用程序。我想为我的应用程序添加单元测试。我正在使用以下方法进行单元测试。 http://sailsjs-documentation.readthedocs.org/en/latest/concepts/Testing/

我正在使用 grunt 来测试我的 mocha 应用程序。现在我需要一种方法来覆盖一些用于我的测试的sails 方法(查找、更新等),因为我不想在测试代码时与数据库进行交互。有没有办法覆盖sails js方法。例如,当我在测试中使用 User.find 方法时,我希望有一个特定的结果来测试我的其他方法是否完美。任何形式的帮助都会受到欢迎。

【问题讨论】:

    标签: node.js unit-testing sails.js mocha.js


    【解决方案1】:

    如果您想在不接触生产数据库的情况下进行测试,您可以使用数据库的不同表/集合。这是集成测试中的常用方法(不使用模拟)。

    这里是例子,在文件bootstrap.test.js

    var Sails = require('sails'),
        sails;
    
    before(function (done) {
      Sails.lift({
        connections: {
          mongodbServer: {
            database: 'database_test'
          }
        },
        models     : {
          migrate: 'drop'
        }
      }, function (err, server) {
        sails = server;
        if (err) return done(err);
    
        done();
      });
    });
    
    after(function (done) {
      // here you can clear fixtures, etc.
      sails.lower(done);
    });
    

    假设您的连接使用mongodbServer 和db database_test。配置它以满足您的需求。

    【讨论】:

    • 谢谢andi的回答,我看过一些关于teting的文章,大部分都说unit teting应该在我们执行完之后很快完成。所以你相信使用模拟是一个好主意,但我找不到任何具体的方法来在帆中使用模拟来覆盖内置函数或其他方法的帆。
    • 确实unit testingintegration testing不一样。我的解决方案实际上是用于集成测试。因为(只是我的观点)Sails 模型中的纯单元测试很难实现,而且它提供的优势也较少。但如果您仍然想使用,请尝试使用sinon。这是参考@Github
    • 我正在我的测试/单元/控制器和测试/单元/模型中编写测试用例。在我的 grunt 文件中,如何使用 bootstrap.test.js 文件在我的单元文件夹中运行所有测试。现在我正在使用 grunt 单独运行测试文件。
    • 我只使用 npm test 而不使用 Grunt。只需编辑package.json 并在scripts 字段下添加test 字段,其值类似于此"test": "_mocha test/bootstrap.test.js test/unit/**/*.js --no-timeouts", 它将读取js 下的所有js 文件test/unit
    • 谢谢安迪的回答。我尝试使用测试数据库并使用 npm test 运行测试。但它给出了错误提示“A hook (orm) failed to load!”,你对这个问题有什么想法吗?提前致谢。
    猜你喜欢
    • 2022-01-24
    • 2022-01-06
    • 2017-04-06
    • 2018-04-26
    • 1970-01-01
    • 2023-01-12
    • 2020-09-02
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多