开玩笑 - 在测试前解决承诺

时间:2016-09-19 19:30:31

标签: javascript testing jestjs

我想为承诺结果编写测试,我想在每个it/pit部分解决承诺。

我需要像这样的人:

describe('getData() results test', () => { 
  return getData().then(response =>  { 
    it('foo', () => expect(response.foo).toEqual(1));

    it('bar', () => expect(response.bar).toEqual(2));

    it('bar', () => expect(response.bar).toEqual(3));
  });
});

如果使用beforeEach - 承诺将被解析为it个部分的次数。我需要解决一次,然后测试响应。有很多测试用例,所以我想将所有测试分成it个部分

4 个答案:

答案 0 :(得分:3)

beforeAll函数仅在运行describe中的所有规范之前调用一次。

当返回承诺时,Jest将等待承诺解决,然后让测试运行。

describe('getData() results test', () => { 
  let data = null;

  beforeAll(() => getData().then(response => {
    data = response;
  }));

  it('foo', () => expect(data.foo).toEqual(1));

  it('bar', () => expect(data.bar).toEqual(2));

  it('bar', () => expect(data.bar).toEqual(3));
});

答案 1 :(得分:1)

查看Jest文档中的Async tutorial。我相信你需要这样的东西:

describe('getData() results test', () => { 
    var response;
    beforeEach(() => {
        response = getData();
    });

    it('foo', () => { return response.then(r => expect(r.foo).toEqual(1))});

    it('bar', () => { return response.then(r => expect(r.bar).toEqual(2))});

    it('bar', () => { return response.then(r => expect(r.bar).toEqual(3))});
});

文档的关键位:

  

应该返回正在测试的承诺。

答案 2 :(得分:0)

  

这不是您问题的答案,但可能会帮助来自Google的人

Jest将等待@ tuchk4提到的beforeAllbeforeEach返回的承诺。

就我而言,我忘记了it函数,并在describe中实施了测试。出乎意料的是,这“可行”,但是beforeAllbeforeEach的承诺将被等待,这很有意义

我说“报价”有效,因为失败的expect()确实会失败,但是不会等待它们返回的承诺会导致UnhandledPromiseRejectionWarning

答案 3 :(得分:0)

您只需执行以下操作

describe('some test suite title', () => {
   let response;

   beforeAll(async (done) => {
    // Do some Async. logic before running any test
    awit require('./somefile');
    response = await getData();
    done();
  });

    // Now run tests => response have the data
    it('foo', () => expect(response.foo).toEqual(1));

    it('bar', () => expect(response.bar).toEqual(2));

    it('bar', () => expect(response.bar).toEqual(3));

});