首页 > 解决方案 > 我如何用 jest 测试异步获取功能

问题描述

谁能告诉我如何用 jest 测试这个功能

export function handleSubmitTest() {

  const postData = async ( url = '', data = {})=>{
        const response = await fetch(url, {
        method: 'POST', 
        credentials: 'same-origin',
        headers: {
            'Content-Type': 'application/json',
        },
       // Body data type must match "Content-Type" header        
        body: JSON.stringify(data), 
      });
  
        try {
          const newData = await response.json();
          console.log(newData);
          return newData;
        }catch(error) {
        console.log("error", error);
        }
    }
    return postData('http://localhost:8081/analyze', {text: "Picard"});
}

这是我在测试文件中所做的,但是当我在命令行中运行测试时,它给了我错误,即未定义提取。

import { handleSubmitTest } from '../formHandler'
import 'regenerator-runtime/runtime';



test('55555', async () => {

    const data = await handleSubmitTest()

    expect(data).toBe({text: "Picard"});

  });

标签: javascriptjestjsfetch

解决方案


fetchwindow范围上定义。JSDom,Jest 使用的 DOM 实现在范围内没有该属性。您需要创建运行测试所需的属性的模拟。

话虽这么说......如果你正在测试一个模拟,你真正测试的是什么?

即,您可能想要测试正在创建或使用此 JSON 的代码,而不是本机 javascript 功能。


推荐阅读