我想知道是否有人已经解决了我正在经历的问题。
我目前正在进行一个项目,该项目的进程分为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测试?
还有没有人遇到过这个问题?如果是这样,我非常想知道您是如何处理和解决这个问题的。
提前致以我的感谢和感谢。
发布于 2013-04-03 08:17:08
我的解决方案是使用环境变量TEST来指定是使用测试数据库还是开发数据库。此示例使用Sequelize,可在本地计算机和Heroku上使用test和dev数据库。
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 });https://stackoverflow.com/questions/9127826
复制相似问题