2012-02-03 4 views
2

誰かが私が経験している問題をすでに解決しているのだろうかと思っていました。RSpec +ジャスミンノード

私は現在、RailsとNodejsプロセスの間で分割されたプロセスを持つプロジェクトに取り組んでいます。私はRSpecをRailsベースのテストに使用し、Jasmine-NodeはNode対応に使用します。

私の状況は、RailsとNodeの両方のアプリケーションが同じデータベースにアクセスするということです。私の問題は、RSpecがTESTデータベースを設定することを簡単にし、いくつかの値を設定してこれらに対してテストを実行しますが、ジャスミンノードはそのようなメカニズムを持っていません。

私のjasmine-nodeデータベースに関連するテストにはTESTデータベースを設定するメカニズムがありません。そのためジャスミンノードテストは自分のDEVELOPMENTデータベースに依存しています。私には、これらのテストが繰り返されないので、これは間違っているか悪いですか。

現在、私のジャスミンノードテストは、別のディレクトリにあり、RailsのRSpec specフォルダの外にあります(ジャスミンノードコマンドライン経由で実行されます)。最近、私はRSpecがジャスミンクライアントのjavascriptテストを実行できることを学びました。 RPsecからジャスミン・ノード・テストを実行するための同様のメカニズムが存在しますか?

他に誰かがこの問題を抱えていますか?もしそうなら、私はあなたがこの問題にどのように近づいて取り組んできたかを聞いて非常に熱心です。

前もって感謝して感謝します。

答えて

1

解決策は、環境変数TESTを使用して、テストまたは開発データベースを使用するかどうかを指定することでした。 Sequelizeを使用するこの例は、ローカルマシンとHerokuの両方で、testデータベースとdevデータベースで動作します。

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 }); 

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; 

そして、データベースにアクセスする各ジャスミン・ノード試験は、以下のブートストラップコードを含むファイルにrequireを行います