簡體   English   中英

完全替換 Node.js 單元測試中的變量值

[英]Completely replace value of variable in Node.js Unit test

我正在嘗試測試一段(對我而言)復雜的代碼,我只想返回虛擬數據,以便我可以對它的處理方式進行斷言。 這是代碼:

const { sql, dbConnPoolPromise } = require('../database/db.js');
router.get('/', async (req, res) => {
    try {
        const pool = await dbConnPoolPromise
        const result = await pool.request()
            .query(SQL_SELECT_ALL);
        res.status(200);
        res.json(result.recordset[0]);
    } catch (err) {
        res.status(500);
        res.send("ERROR, General Get" + err.message);
    }
});

我想用一組虛擬數據替換const 結果,因此 mocking SQL 服務器可能給出的響應。 我無法弄清楚如何做到這一點。 我目前正在使用 Jest 作為我的測試套件,並希望使用 spyOn 或 Jest.fn() 來替換它,但這僅適用於函數。 有沒有辦法替換變量? 我無法替換整個 router.get,因為我正在測試 res.status(200) (以及其他)是否正確發送到客戶端,我只想替換變量的值。

如果需要,dbConnPoolPromise 的內容是:

let sql = require('mssql');
const config = require('config');
let dbConnPoolPromise = new sql.ConnectionPool(config.get('connection'))
        .connect()
        .then(pool => {
        return pool
        })
        .catch(err => console.log('Database Connection Failed - error: ', err))
module.exports = {
    sql, dbConnPoolPromise, buildSelect
};

您可以從服務包裝器訪問您的查詢,例如。

export function async getAllItems() {
  const pool = await dbConnPoolPromise
  return await pool.request().query(SQL_SELECT_ALL)
}

然后你可以使用 jest 的手動模擬功能https://jestjs.io/docs/en/manual-mocks模擬出 getAllItems 的響應。

作為更廣泛的評論,這通常是為什么我們有模式從存儲庫或服務訪問數據庫,而不是直接從 controller 或像這樣的路由訪問它。 一旦你將它包裝在一個服務中,它會讓你在測試期間更容易模擬它。

暫無
暫無

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

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