簡體   English   中英

如何通過從 mongo db 檢索到的 object 到 javascript 中的測試

[英]How to pass object retrieved from mongo db to the test in javascript

我正在研究 NodeJS 測試自動化項目。 我的目標是從 Mongo DB 獲取數據並在測試中使用它。 我成功地從數據庫中查詢了數據,但到目前為止我還沒有將這些值傳輸到測試中。

我的 Mongo DB halper (mongodbHelper.js):

var MongoClient = require('mongodb').MongoClient;
var url = "myurl";

var data;
const getTestData =  async function(){
    MongoClient.connect(url, function(err, db) {
        if (err) throw err;
        var dbo = db.db("mydb");
        dbo.collection("my_test_collection").findOne({"testId": "test_01"}, function(err, result) {
            if (err) throw err;
            db.close();
            data= result;
            console.log(data); // This print prints correct data
            return result;
        });
    });
}

module.exports =
{
    getTestData
}

處理程序內的打印正確打印檢索到的數據。 現在我需要在下面的測試套件中使用它。 我想在 Before 方法中啟動 testData 變量並在測試中使用它。 如果我按以下方式進行操作,則測試中的打印打印未定義。 它在幫助程序中正確打印之前打印它。 所以我認為這是一個同步問題。

const mongodb = require('./mongodbHelper');
var testData; 

    describe('Playwright with Mocha Demo', function() {
    
        before('name', async function() {
            testData = await mongodb.getTestData();
            console.log(testData); // Here it prints 'undefined'

        });
    ....

請告知我如何將數據從處理程序正確傳遞到測試中的 testData 變量。

您沒有從異步 function getTestData返回任何內容。

Mongo 調用是異步的,但您使用的是回調 function。 您可以將回調 function 傳遞給getTestData並使用數據調用它(您正在執行控制台日志)。 然而,Mongo 調用返回 Promises,所以你可以這樣做:

const getTestData = async function() {
    const db = await MongoClient.connect(url);
    const dbo = db.db("mydb");
    const result = await dbo.collection("my_test_collection").findOne({"testId": "test_01"});
    db.close();
    return result;
});

然后在您的測試中,您可以使用以下方法檢索數據:

testData = await mongodb.getTestData();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM