Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用另一个异步函数的异步函数的Jest测试失败_Javascript_Unit Testing_Jestjs_Enzyme - Fatal编程技术网

Javascript 调用另一个异步函数的异步函数的Jest测试失败

Javascript 调用另一个异步函数的异步函数的Jest测试失败,javascript,unit-testing,jestjs,enzyme,Javascript,Unit Testing,Jestjs,Enzyme,我正在尝试测试一个异步函数,该函数使用另一个异步函数返回的数据。下面是解释我的问题的代码: StudentInfo.js export async function getData() { //studentData imported from another file return new Promise(resolve => { setTimeout(() => { resolve(studentData); }, 5000); }); }

我正在尝试测试一个异步函数,该函数使用另一个异步函数返回的数据。下面是解释我的问题的代码:

StudentInfo.js

export async function getData() {
  //studentData imported from another file
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(studentData);
    }, 5000);
  });
}

export async function filterStudents() {
  const studentData = await StudentInfo.getData();

  //computations

  return filteredData; //object
}
StudentInfo.test.js

import * as studentInfo from "src/StudentInfo.js"

describe("StudentInfo" , () => {
   test("student data correctly filtered", async () => {
      const studentData = [
         {
            name: Sarah Marshall,
            id: srhmar451
         },
         {...}
      ];
      expectedData = { [...], [...]};
      const spy = jest.spyOn(studentInfo, "getData");
      spy.mockReturnValue(studentData);
      await expect(studentInfo.filterStudents()).toEqual(expectedData);
   });
});

我的测试失败,因为预期的返回值是
Promise{}
。有人能帮我为我的
filterStudents()
函数写一个测试吗?我在这方面已经坚持太久了。

以下是一个可以帮助您开始的工作示例:

StudentInfo.js

import * as StudentInfo from './StudentInfo';

export async function getData() {
  throw new Error('should not get here');  // <= getData will be mocked
}

export async function filterStudents() {
  const studentData = await StudentInfo.getData();
  return studentData.filter(v => v.id === '2');
}

您可以使用将返回值模拟为解析为传递给它的值的
Promise
(尽管如果您只是使用,也可以正常工作,因为对值调用
await
是有效的,例如
const five=await 5;//因为您在监视异步函数,所以应该使用
spy.mockResolvedValue(学生数据)
import * as StudentInfo from "./StudentInfo"

describe("StudentInfo", () => {
  test("student data correctly filtered", async () => {
    const studentData = [
      { name: 'student1', id: '1' },
      { name: 'student2', id: '2' },
      { name: 'student3', id: '3' }
    ];
    jest.spyOn(StudentInfo, "getData").mockResolvedValue(studentData);
    await expect(StudentInfo.filterStudents()).resolves.toEqual([{ name: 'student2', id: '2' }]);  // Success!
  });
});