【问题标题】:RSpec + jasmine-nodeRSpec + 茉莉花节点
【发布时间】:2012-02-03 11:19:48
【问题描述】:

我想知道是否有人已经解决了我遇到的问题。

我目前正在处理一个在 Rails 和 Nodejs 进程之间拆分进程的项目。我使用 RSpec 进行基于 Rails 的测试,使用 jasmine-node 进行 Node 对应。

我的情况是 Rails 和 Node 应用程序都访问同一个数据库。我的问题是,RSpec 在设置 TEST 数据库、为其播种一些值并针对这些值运行测试时变得微不足道,但 jasmine-node 没有这样的机制。

相反,我的 jasmine-node 数据库相关测试没有设置 TEST 数据库的机制,因此我的 jasmine-node 测试依赖于我的 DEVELOPMENT 数据库。对我来说,这既错误又不好,因为这些测试是不可重复的。

目前,我的 jasmine-node 测试位于 Rails 的 RSpec 规范文件夹之外的单独目录中(并通过 jasmine-node 命令行运行)。最近我了解到 RSpec 可以驱动 jasmine 客户端 javascript 测试。是否存在类似的机制来从 RPsec 驱动 jasmine 节点测试?

还有其他人遇到过这个问题吗?如果是这样,我很想知道您是如何处理和解决这个问题的。

提前表示感谢和感谢。

【问题讨论】:

    标签: ruby-on-rails node.js rspec jasmine


    【解决方案1】:

    我的解决方案是使用环境变量 TEST 来指定是使用测试数据库还是开发数据库。此示例使用 Sequelize,可在本地计算机和 Heroku 上使用测试和开发数据库。

    var config = {}
    
    if (typeof (process.env.DATABASE_URL) != 'undefined') {
        var url = require('url');
    
        var dbUrl;
    
        if (process.env.TEST == 'true') {
            dbUrl = url.parse(process.env.HEROKU_POSTGRESQL_NAVY_URL);
        }
        else {
            dbUrl = url.parse(process.env.DATABASE_URL);
        }
    
        var authArr = dbUrl.auth.split(':');
    
        config.database = dbUrl.path.substring(1);
        config.username = authArr[0];
        config.password = authArr[1];
        config.host = dbUrl.hostname;
        config.port = dbUrl.port;
        config.dialect = 'postgres';
        config.protocol = 'postgres';
        config.importBatchSize = 1000;
    }
    else {
        if (process.env.TEST == 'true') {
            console.log('DB:  test');
    
            config.database = 'test';
            config.username = 'postgres';
            config.password = 'postgres';
            config.host = '127.0.0.1';
            config.port = 5432;
            config.dialect = 'postgres';
            config.protocol = 'tcp';
            config.importBatchSize = 1000;
        }
        else {
            console.log('DB:  db');
    
            config.database = 'db';
            config.username = 'postgres';
            config.password = 'postgres';
            config.host = '127.0.0.1';
            config.port = 5432;
            config.dialect = 'postgres';
            config.protocol = 'tcp';
            config.importBatchSize = 1000;
        }
    }
    
    config.logging = false;
    //config.logging = console.log;
    
    module.exports = config;
    

    然后,每个访问数据库的 jasmine-node 测试都会对包含以下引导代码的文件执行require

    process.env['TEST'] = 'true'; // Use test database
    var config             = require('../config/config.js');
    process.env['TEST'] = 'false'; // Stop using test database after this
    
    var sequelizeSingleton = require("../classes/model.js");
    sequelizeSingleton.setup(path.normalize(__dirname + '/../models'), config.database, config.username, config.password,
        { dialect: config.dialect, protocol: config.protocol, host: config.host, port: config.port, omitNull: true, logging: config.logging });
    

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      相关资源
      最近更新 更多