开玩笑 - 在测试前解决承诺
jest - resolve promise before tests
我想为承诺结果编写测试,我不想在每个 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
- promise 将被解决的次数与 it
部分的数量一样多。我需要解决一次,然后测试响应。有很多测试用例,所以我想将所有测试分成 it
个部分
查看 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))});
});
文档的关键位:
The promise that is being tested should be returned.
beforeAll
函数在 describe 中的所有规范之前仅调用一次 运行。
当return promise 时,Jest 将等待promise 解决后再让测试运行。
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));
});
This is not an answer to your question but it may help people comming from Google
Jest 将等待来自 beforeAll
或 beforeEach
的承诺 return,如 @tuchk4 所述。
就我而言,我忘记了 it
函数并将测试直接实施到 describe
中。令人惊讶的是,这个 "works" 但 beforeAll
和 beforeEach
的承诺将 不会 等待,这很有意义
我在报价中说 "works" 因为失败 expect()
确实会失败,但是不会等待他们 return 的承诺,这将导致 UnhandledPromiseRejectionWarning
.
您可以简单地执行以下操作
describe('some test suite title', () => {
let response;
beforeAll(async (done) => {
// Do some Async. logic before running any test
await 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));
});
我想为承诺结果编写测试,我不想在每个 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
- promise 将被解决的次数与 it
部分的数量一样多。我需要解决一次,然后测试响应。有很多测试用例,所以我想将所有测试分成 it
个部分
查看 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))});
});
文档的关键位:
The promise that is being tested should be returned.
beforeAll
函数在 describe 中的所有规范之前仅调用一次 运行。
当return promise 时,Jest 将等待promise 解决后再让测试运行。
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));
});
This is not an answer to your question but it may help people comming from Google
Jest 将等待来自 beforeAll
或 beforeEach
的承诺 return,如 @tuchk4 所述。
就我而言,我忘记了 it
函数并将测试直接实施到 describe
中。令人惊讶的是,这个 "works" 但 beforeAll
和 beforeEach
的承诺将 不会 等待,这很有意义
我在报价中说 "works" 因为失败 expect()
确实会失败,但是不会等待他们 return 的承诺,这将导致 UnhandledPromiseRejectionWarning
.
您可以简单地执行以下操作
describe('some test suite title', () => {
let response;
beforeAll(async (done) => {
// Do some Async. logic before running any test
await 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));
});