当前位置: 首页 > 知识库问答 >
问题:

在玩笑中检验诺言的最佳方法

卞俊贤
2023-03-14

除非我误解了什么,否则resolves和rejects(https://facebook.github.io/jest/docs/expect.htmlet.resolves)在vNext之前都是不可用的。现在/同时,用玩笑来检验诺言的推荐方法是什么?难道这只是把期望放在那里和抓到吗?

例如:

describe('Fetching', () => {
    const filters = {
        startDate: '2015-09-01'
    };
    const api = new TestApiTransport();

    it('should reject if no startdate is given', () => {
        MyService.fetch().catch(e => expect(e).toBeTruthy()); // see rejects/resolves in v20+
    });            

    it('should return expected data', () => {
        MyService.fetch(filters, null, api).then(serviceObjects => {
            expect(serviceObjects).toHaveLength(2);
        }).catch(e => console.log(e));
    });            
});

2019年6月15号更新:在我发布这个问题后不久,Jest就开始支持这个开箱即用。我改变了下面接受的答案,以反映目前最好的方式来做到这一点。

共有3个答案

程志新
2023-03-14

我能够用AXIOS测试JEST的HTTP REST调用,就像这样。

it('has an API worth testing', async () => {
  let httpResult = null;
  await callThefunctionThatReturnsPromiseToMakeTheAxiosApiCall()
    .then(function(result) {httpResult=result;})
    .catch(function(err) {httpResult=err;});
  expect(httpResult.data.myData).toBe("myExpectedValue");
});

it('has an API worth testing', async () => {
  let httpResult = await callThefunctionThatReturnsPromiseToMakeTheAxiosApiCall();
  expect(httpResult.data.myData).toBe("myExpectedValue");
});
赵炯
2023-03-14

中返回promise和expect

describe('Fetching', () = > {
  const filters = {
    startDate: '2015-09-01'
  };
  const api = new TestApiTransport();
  it('should reject if no startdate is given', () = > {
    return MyService.fetch()
      .catch (e => expect(e).toBeTruthy()); // see rejects/resolves in v20+
  });
  it('should return expected data', () = > {
    return MyService.fetch(filters, null, api)
      .then(serviceObjects => {
        expect(serviceObjects).toHaveLength(2);
      })
  });
});

或使用

describe('Fetching', () = > {
  const filters = {
    startDate: '2015-09-01'
  };
  const api = new TestApiTransport();
  it('should reject if no startdate is given', async() = > {
    try {
      const r = await MyService.fetch()
    } catch (e) {
      expect(e).toBeTruthy()
    }
  });
  it('should return expected data', async() = > {
    const serviceObjects = await MyService.fetch(filters, null, api)
    expect(serviceObjects).toHaveLength(2);
  });
});
劳和雅
2023-03-14

null

describe('Fetching', () => {
    const filters = {
        startDate: '2015-09-01'
    };
    const api = new TestApiTransport(); 

 it('should reject if no startdate is given', () => {
   expect.assertions(1);
   return expect(MyService.fetch()).rejects.toEqual({
     error: 'Your code message',
   });
 });          


 it('should return expected data', () => {
   expect.assertions(1);
   return expect(MyService.fetch(filters, null, api)).resolves.toEqual(extectedObjectFromApi);
 });            
});

更新(06.01.2019)

同意接受的答案不能正确工作,因为行 起到了所有的作用。链接到文档

Expect.assertions(number)验证在测试期间是否调用了一定数量的断言。在测试异步代码时,这通常很有用,可以确保回调中的断言确实被调用。

所以将这一行放在顶部将控制到测试运行时所做的断言的具体数量。

 类似资料:
  • 我创建了这个类: 在服务中: 我想知道,在开玩笑的情况下,是否可以这样做:

  • 问题内容: 我想嘲笑localStorage方法以进行错误模拟。我在Utility.js中定义了localstorage getter和setter方法。我想嘲笑在调用时抛出错误。 开玩笑, 但是模拟永远不会被调用。我也尝试过 问题答案: 这与Andreas在答案中建议的一致,但是我能够使用Storage接口对其进行模拟。我做了这样的事情 开玩笑, 这次公关讨论也很有帮助。

  • 问题内容: 在调用对象的函数之前,我需要检查对象是否为null,以避免引发。 最好的方法是什么?我考虑过这些方法。 哪一种是Java最佳编程实践? 问题答案: 方法4是最好的。 将使用短路评估,这意味着如果a的第一个条件为假,则评估结束。

  • 问题内容: 我在带有打字稿的React Router v5.1.2中使用UseHistory挂钩吗?运行单元测试时,我遇到了问题。 TypeError:无法读取未定义的属性“ history”。 我也尝试使用,但仍然无法正常工作。 问题答案: 浅化使用的反应功能组件时,我需要相同的内容。 在我的测试文件中解决了以下模拟问题:

  • 每次路由转换时验证令牌。为此,我必须在每次要验证时进行rest调用。 只通过一次rest调用验证令牌一次,然后将令牌存储在本地存储中。(令牌本身只有一个布尔值指示它是否通过了身份验证) 我关心的是不要在每一个路由事务中进行rest调用,我不想消耗那么多http流量。但是,如果没有别的办法,我会这么做的。

  • 问题内容: 我有一个依赖于导出变量的文件。此变量设置为,但是如果需要,可以将其设置为手动设置,以防止下游服务请求时出现某些行为。 我不确定如何在Jest中模拟变量,以便更改测试和条件的值。 例: 问题答案: 如果将ES6模块语法编译为ES5,则此示例将起作用,因为最后,所有模块导出都属于同一对象,可以对其进行修改。 另外,您可以切换到raw commonjs 函数,并借助以下方法做到这一点: