簡體   English   中英

如何開玩笑地從模擬回調 function 中解決 promise

[英]How to resolve promise from a mocked callback function in jest

我是開玩笑的新手,並試圖了解模擬是如何工作的。 我無法弄清楚如何從模擬模塊 function 中解析實際的 promise。 我有一個簡單的數據接口模塊,如下圖

const fs = require('fs');
const path = require('path');

function loadData(fileName){
    let promise = new Promise((resolve, reject) => {
        fs.readFile(path.join(__dirname, `/${fileName}`), (err, data) => {
            if (err) {
              console.error(err)
              reject(err);
            }
            data = data.toString();
            try{
                data = JSON.parse(data);
            }
            catch(err){
                console.error(err)
                reject(new Error('Error while parsing json'))
            }
            resolve(data);
        })
    })
    return promise;
}

模塊的測試文件看起來像

jest.mock('fs');

const fs = require('fs');
const DI = require('./../data/data_interface');


describe('data loading functionality',() => {
    test('load data opens file system',async () => {
        try {
            expect.assertions(1);
            let fileName = 'expenses.json';
            await DI.loadData(fileName);
           expect(fs.readFile.mock.calls.length).toBe(1); 
        }
        catch(err){
            throw(err);
        }
    })
})

當我運行上述測試時,出現超時錯誤,這似乎是因為模擬無法解析 promise。 如何從提供的模擬中解析 promise?

您應該在測試中刪除異步等待

暫無
暫無

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

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