亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何對異步函數進行正確的單元測試?

如何對異步函數進行正確的單元測試?

慕桂英4014372 2023-11-12 15:24:10
我有一個檢查 url 地址的函數,如果該地址有效或無效,則返回 true。我需要使用 Jest 編寫測試。為了完成這個任務,我編寫了位于文檔底部的測試用例。起初它引發了再生器運行時錯誤,但我通過相應的導入修復了該錯誤。但隨后它開始拋出該錯誤。為了解決這個問題,我嘗試導入 fetch 庫,但錯誤沒有解決。盡管我的應用程序中的錯誤功能正常工作。如何修復該錯誤?ReferenceError:未定義提取const fetch = require('node-fetch');test("Testing valid product", async ()=>{    const result = await valid('#products/1');    expect(result).toBe(true);});我的功能//FUNCTION WITH VALIDATIONexport async function valid(path){    //GETTING GROUP OF THE PRODUCTS    let group = path.substr(path.indexOf('#')+1,path.indexOf('/')-1);    //GET ID OF ITEM OF THE GROUP    let url = path.substr(path.indexOf('/')+1);    if(group=='products'){        //CHECKING IF ITEM WITH THAT ID EXISTS        let items = await fetch('https://my-json-server.typicode.com/ValeryDrozd/Valerydrozd.github.io/products').then(res => res.json());        for(let i=0;i<items.length;i++){            if(String(items[i]['id'])==url)return true;        }        return false;    }    if(group=='promos'){        let items = await fetch('https://my-json-server.typicode.com/ValeryDrozd/Valerydrozd.github.io/promos').then(res => res.json());        for(let i=0;i<items.length;i++){            if(String(items[i]['id'])==url)return true;        }        return false;    }    if(group=='order'){        let orders = JSON.parse(localStorage.getItem('orders'));        if(orders==null)return false;        if(orders['orderids'].indexOf(url)==-1)return false;        return true;    }    return false;}我的 jest.config.js 文件module.exports = {    collectCoverage: true,    transform: { '\\.js$': 'babel-jest', },};
查看完整描述

1 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

我認為您可以在測試之前通過使用或自己jest-fetch-mock創建模擬來解決此問題,如下所示:fetch


// Mock at global level

global.fetch = jest.fn(() =>

  Promise.resolve({

    json: () => Promise.resolve({/* whatever you want to ressolve */}),

  })

);


test("Testing valid product", async ()=>{

  const result = await valid('#products/1');

  expect(result).toBe(true);

});


查看完整回答
反對 回復 2023-11-12
  • 1 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號