如何在Jest中执行“嵌套”预期,或验证具有多个预期的拒绝

vojdkbi0  于 11个月前  发布在  Jest
关注(0)|答案(1)|浏览(109)

我发现自己想要对一个被拒绝的promise结果进行多次验证。
到目前为止,我找到的唯一方法是通过“hacking”toSatisfy

await expect(axios.get('<some call that throws a 40x error')).rejects.toSatisfy((axiosError) => {
      expect(axiosError.response?.status).toBe(400);
      expect(axiosError.response?.data).toHaveProperty('message');
      expect(
        (
          axiosError.response?.data as {
            message: string;
          }
        ).message
      ).toMatch(/invalid period.*/);
      return true;
    });

字符串
有没有人有更好的方法来做到这一点?
正如你所看到的,它有点笨重,因为我必须在最后使用return true,而且它不流畅,因为我没有使用toSatisfy,因为它应该被使用。

ezykj2lf

ezykj2lf1#

你试过.catch吗?
唯一的缺点是,你应该提前指定Assert的总数,如果不是所有的expect在超时之前都通过了,那么测试就会失败。在我看来,这是一种比toSatisfy更语义化的方法。

it('Test promise rejection', async () => {
    expect.assertions(3);
    await axios.get('<some call that throws a 40x error')
      .catch(axiosError => {
         expect(axiosError.response?.status).toBe(400);
         expect(axiosError.response?.data).toHaveProperty('message');
         expect(
           (
             axiosError.response?.data as {
               message: string;
             }
           ).message
        ).toMatch(/invalid period.*/);
      });
 });

字符串

相关问题