Javascript 开玩笑不';当考试应该通过时,不要不及格

Javascript 开玩笑不';当考试应该通过时,不要不及格,javascript,jestjs,Javascript,Jestjs,我从jest fetch mock npm包示例中获取了精确的代码示例,我不能让它失败。谁能告诉我我做错了什么 这是我的代码: require('jest-fetch-mock')。enableMocks(); const APIREST=(谁)=>{ 如果(谁==‘谷歌’){ 返回获取('https://google.com然后((res)=>res.json()); }否则{ 返回“未提供参数”; } }; 描述('测试api',()=>{ 在每个之前(()=>{ fetch.resetMo

我从jest fetch mock npm包示例中获取了精确的代码示例,我不能让它失败。谁能告诉我我做错了什么

这是我的代码:

require('jest-fetch-mock')。enableMocks();
const APIREST=(谁)=>{
如果(谁==‘谷歌’){
返回获取('https://google.com然后((res)=>res.json());
}否则{
返回“未提供参数”;
}
};
描述('测试api',()=>{
在每个之前(()=>{
fetch.resetMocks();
});
它('调用google并将数据返回给我',()=>{
fetch.mockResponseOnce(JSON.stringify({data:'12345'}));
//在响应上断言
apirest('google')。然后((res)=>{
expect(res.data).toEqual('not 12345');
});
});
});

即使很明显,我对提取的模拟响应与我的预期结果不匹配,jest仍然说测试通过了,为什么?在“测试通过”部分上面,它告诉我它收到了超出预期的内容,但测试仍然显示“通过”,为什么?在这种情况下,我如何才能使它失败,在这种情况下,它实际上是如何预期的。

有两种可能的解决方案:

  • 使用
    expect.assertions
    使jest验证是否所有断言都已断言,并返回承诺:
  • it('调用谷歌并将数据返回给我',()=>{
    fetch.mockResponseOnce(JSON.stringify({data:'12345'}));
    期望.断言(1);
    //在响应上断言
    返回apirest('google')。然后((res)=>{
    expect(res.data).toEqual('not 12345');
    });
    });
    });
    
    如果您返回一个承诺,jest将知道代码是异步运行的

  • 使用异步/等待
  • 使用
    async/await
    语法:

    it('调用google并将数据返回给我',async()=>{
    fetch.mockResponseOnce(JSON.stringify({data:'12345'}));
    期望.断言(1);
    //在响应上断言
    const result=等待APIRESQUEST('google'))
    期望(结果)。toEqual(“不是12345”);
    });
    });
    
    您的问题有两种可能的解决方案:

  • 使用
    expect.assertions
    使jest验证是否所有断言都已断言,并返回承诺:
  • it('调用谷歌并将数据返回给我',()=>{
    fetch.mockResponseOnce(JSON.stringify({data:'12345'}));
    期望.断言(1);
    //在响应上断言
    返回apirest('google')。然后((res)=>{
    expect(res.data).toEqual('not 12345');
    });
    });
    });
    
    如果您返回一个承诺,jest将知道代码是异步运行的

  • 使用异步/等待
  • 使用
    async/await
    语法:

    it('调用google并将数据返回给我',async()=>{
    fetch.mockResponseOnce(JSON.stringify({data:'12345'}));
    期望.断言(1);
    //在响应上断言
    const result=等待APIRESQUEST('google'))
    期望(结果)。toEqual(“不是12345”);
    });
    });
    
    不要忘记,在像
    这样的承诺中(()=>{blah blah})
    ,该代码是异步执行的。您的测试在执行
    .then()
    之前完成。将回调函数传递给
    it()
    async
    ,然后
    等待
    apirest('google')
    。(因此,
    让res=wait-apirest('google');expect(res.data.).toEqual('not 12345');
    )不要忘记,在像
    这样的承诺中,然后(()=>{blah})
    ,该代码异步执行。在执行
    .then()
    之前,测试完成。将回调函数传递给
    it()
    async
    ,然后
    等待
    apirest('google')
    。(所以
    let res=wait-apirest('google');expect(res.data).toEqual('not 12345');