3

mocha を使用してすべてのテストを実行する前に、mongoose との接続 (およびデータベースのクリーンアップ) を作成しています (_setup.js):

var mongoose = require('mongoose'),
nconf = require('nconf');

nconf.env().argv(); 

var _conn;

before(function(done){
    _conn = mongoose.createConnection(nconf.get('TEST_DB'), function(error){
      if(error) return done(error);

      _conn.db.dropDatabase(done);
   });
});

after(function(done){
   _conn.db.dropDatabase(function(error){
       if(error) return done(error);

       _conn.close(done);
   });
});

他のテスト スイートでは、マングース モデルを構築するためにこの接続が必要です。これらのテストはmocha js APIを介してアプリで実行できるため、デフォルトのmongoose接続の代わりに別の接続を使用しています。アプリはデフォルトのマングース接続を使用します。接続変数が必要なテストの例:

var should = require('should'),
service = require('../lib/service')(_conn); // << somehow need that conn variable created in before tests

describe('Service', function(){

   describe('#dodboperation()', function(){

       //tests and stuff

モカのファイル/テストスイート間で変数を渡す方法はありますか? 提案?

4

1 に答える 1

4

環境変数を使用します。mocha ファイルの先頭に、以下を含めます。

process.env.TEST = 'true'; // Use test database

次に、次のようなデータベース構成を使用します。

var url = require('url');
var config = {};
var dbUrl;

if (typeof(process.env.DATABASE_URL) !== 'undefined') {
    dbUrl = url.parse(process.env.DATABASE_URL);
}
else if (process.env.TEST === 'true') {
    dbUrl = url.parse('tcp://postgres:postgres@127.0.0.1:5432/test');
}
else {
    dbUrl = url.parse('tcp://postgres:postgres@127.0.0.1:5432/db');
}

config.dialect = 'postgres';
config.protocol = dbUrl.protocol.substr(0, dbUrl.protocol.length - 1); // Remove trailing ':'
config.username = dbUrl.auth.split(':')[0];
config.password = dbUrl.auth.split(':')[1];
config.host = dbUrl.hostname;
config.port = dbUrl.port;
config.database = dbUrl.path.substring(1);

console.log('Using database ' + config.database);
module.exports = config;

また、開発マシンの異なるポートで 2 つの異なるサーバーを実行しています。通常の開発ではポート 4000 で nodemon を実行し、TEST == 'true' の場合、サーバーはポート 4500 で実行されます。

于 2013-07-26T02:27:39.853 に答える