2017-09-21 1 views
1

だから私はいくつかのユニットテストの後にdbを(前または)クリーンアップしたいと思います。mochaテストでのMongodbアクセス

私のコードブロックに表示されるコードは、基本的にはmochaのブロックafterAllです。私はテストを実行するためにwebdriver.ioテストランナーを使用しています。

function createConnection(){ 
    MongoClient.connect('mongodb://127.0.0.1:24001/meteor', function(err, db){ 
    if (err) 
     throw err; 
    } 
} 

function getCollection(name){ 
    return db.collection(name) //don't have db at this scope, problem? 
} 

//app.js 
createConnection(); 
let myCollection = getCollection('data'); 
...//do stuff with myCollection 

closeConnection(); 

:可能な場合、私は、このようなものを好むだろう

function createConnection(){ 
    MongoClient.connect('mongodb://127.0.0.1:24001/meteor', function(err, db) { 
    if (err) 
     throw err; 
    console.log("connected to the mongoDB !"); 

    let myCollection = db.collection('test_collection'); 
    // do stuff with myCollection 

    }); 
} 

:私は理解していない参照、接続範囲外からデシベルのものを使用する方法、である

これは可能ですか?

+0

実データベースにアクセスしようとしていますか? – lukaleli

+0

はいmongodb 2.6.7、またはあなたの質問をどうすれば理解できますか? – Gobliins

+0

それは悪い考えです。あなたはいつもあなたのテストのためにデータベースを模擬します。同じことがhttp要求にも当てはまります。 https://github.com/williamkapke/mongo-mockのようなものを見て、実際のデータベースの代わりに使用してください。 – lukaleli

答えて

0

経験則では、テストケースでデータベースやHTTPリクエストなどのことを常に模倣するということです。 mongo-mockのようなものを見て、代わりにそれを使用してください。

+0

単体テストでは私はこのステートメントに同意しますが、私のend2endテストでは、実際のデータベースにアクセスしたいと考えています(少なくとも今のところ) – Gobliins

+0

Btw。 afaics私の質問は、mongo-mock dbにも当てはまります – Gobliins

1

あなたが記述する方法でMongoDBデータベースに接続したい場合は、getCollectionを呼び出すときにJavaScriptの約束を使ってdbが定義されていることを確認することができます。私は習慣のうち、ES6構文のビットを使用するが、それはES5とまったく同じ働き

function createConnection(connection) { 
    // return a promise 
    return new Promise((resolve, reject) => { 
    MongoClient.connect('mongodb://127.0.0.1:24001/meteor', function (err, db) { 
     if (err) { 
     // rejects with error if connection fails 
     reject(err); 
     } 
     // returns handle to database if connection successful 
     resolve(db); 
    }); 
    }); 
} 

// function takes handle to database and collection name 
function getCollection(db, name) { 
    return db.collection(name); 
} 

// test it works 
createConnection().then((db) => { 
    let myCollection = getCollection(db, 'foo'); 
    // do stuff with one collection 
    // e.g. myCollection.deleteOne({ foo: 1 }); 
    // ... 

    // do stuff with another collection 
    myCollection = getCollection(db, 'bar'); 
    // e.g. myCollection.insert({ bar: 1 }); 
    // ... 

// ensure you catch any errors and log them to the console 
}).catch(console.error); 

注:あなたがafterAllブロックに含まれるコードは、次のようなものになるだろう。

関連する問題