RSpec +茉莉花节点
我想知道是否有人已经解决了我遇到的问题。
我目前正在使用Rails和Nodejs进程拆分进程的项目。 我使用RSpec进行基于Rails的testing,并使用节点对应的jasmine-node。
我的情况是Rails和Node应用程序都访问同一个数据库。 我的问题是RSpec在设置一个TEST数据库的时候是微不足道的,为它提供一些值,并针对这些值运行testing,但是jasmine-node没有这样的机制。
相反,我的茉莉花节点数据库相关的testing没有机制来build立一个testing数据库,所以我的茉莉花节点testing,而不是依赖我的发展数据库。 对我来说这是错误的和不好的,因为这些testing是不可重复的。
目前我的茉莉花节点testing是在一个单独的目录和Rails的RSpec规范文件夹(并通过茉莉花节点命令行运行)之外。 最近我了解到RSpec可以驱动茉莉花客户端JavaScripttesting。 是否存在类似的机制来驱动RPsec的茉莉花节点testing?
有没有其他人遇到过这个问题? 如果是这样,我非常希望听到你们如何接近和解决这个问题。
提前感谢和感谢。
我的解决scheme是使用环境variablesTEST来指定是否使用testing或开发数据库。 这个使用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-nodetesting都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 });