Ruby on rails RSpec+;茉莉结
我想知道是否有人已经解决了我遇到的问题 我目前正在从事一个项目,该项目的进程分为Rails进程和Nodejs进程。我使用RSpec进行基于Rails的测试,使用jasmine节点进行对应的节点测试 我的情况是Rails和Node应用程序都访问同一个数据库。我的问题是,RSpec使得设置测试数据库、为其植入一些值并针对这些值运行测试变得微不足道,但jasmine节点没有这样的机制 相反,我的jasmine节点数据库相关测试没有设置测试数据库的机制,因此我的jasmine节点测试依赖于我的开发数据库。对我来说,这既是错误的也是糟糕的,因为这些测试是不可重复的 目前,我的jasmine节点测试位于一个单独的目录中,位于Rails的RSpec spec文件夹之外(并通过jasmine节点命令行运行)。最近我了解到RSpec可以驱动jasmine客户端javascript测试。是否存在类似的机制从RPsec驱动jasmine节点测试 还有其他人遇到过这个问题吗?如果是这样的话,我很想知道你们是如何处理这个问题的Ruby on rails RSpec+;茉莉结,ruby-on-rails,node.js,rspec,jasmine,Ruby On Rails,Node.js,Rspec,Jasmine,我想知道是否有人已经解决了我遇到的问题 我目前正在从事一个项目,该项目的进程分为Rails进程和Nodejs进程。我使用RSpec进行基于Rails的测试,使用jasmine节点进行对应的节点测试 我的情况是Rails和Node应用程序都访问同一个数据库。我的问题是,RSpec使得设置测试数据库、为其植入一些值并针对这些值运行测试变得微不足道,但jasmine节点没有这样的机制 相反,我的jasmine节点数据库相关测试没有设置测试数据库的机制,因此我的jasmine节点测试依赖于我的开发数据库
我提前表示感谢。我的解决方案是使用环境变量测试来指定是使用测试数据库还是使用开发数据库。此示例使用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节点测试在包含以下引导代码的文件上执行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 });