我想为承诺结果编写测试,我想在每个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
个部分
答案 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提到的beforeAll
或beforeEach
返回的承诺。
就我而言,我忘记了it
函数,并在describe
中实施了测试。出乎意料的是,这“可行”,但是beforeAll
和beforeEach
的承诺将不被等待,这很有意义
我说“报价”有效,因为失败的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));
});