首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSpec +jasmine节点

RSpec +jasmine节点
EN

Stack Overflow用户
提问于 2012-02-03 19:19:49
回答 1查看 1K关注 0票数 2

我想知道是否有人已经解决了我正在经历的问题。

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

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

相反,我的jasmine-node数据库相关测试没有设置测试数据库的机制,所以我的jasmine-node测试依赖于我的开发数据库。对我来说,这是错误和糟糕的,因为这些测试是不可重复的。

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

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

提前致以我的感谢和感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-03 08:17:08

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

代码语言:javascript
复制
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节点测试对包含以下引导代码的文件执行require

代码语言:javascript
复制
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 });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9127826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档