开玩笑-某些测试由于先前测试中的断言而失败

时间:2020-01-29 13:37:15

标签: asynchronous mocking jestjs throw supertest

在大多数情况下,我在Express应用程序中一直很顺畅地使用 Jest supertest 。我遇到了一个问题,使我无法进行诊断。

长话短说,我创建了一个测试,该测试为模拟的第三方API调用明确引发了错误。我断言模拟的实现会引发错误,并且可以成功执行。在一个新的describe块中,我创建了另一个测试,该测试仅对调用了我的模拟的次数进行断言。如果我独自运行测试,则测试通过。但是,当我运行整个测试套件时,会收到以下错误,好像来自先前测试的断言在单独的describe块中以某种方式渗入了该测试。

Error: expect(received).toThrow(expected)

首次测试

describe('Create Card', () => {
  beforeEach(() => {
    jest.mock('customers');
  });

  afterEach(() => {
    jest.clearAllMocks();
  });

  it('POST /card - responds with 500 if error', async () => {
    customers.retrieve.mockImplementationOnce(handlePromise(false, customer));

    const res = await request.post('/card').send(data);

    expect(res.statusCode).toBe(500);
    expect(customers.retrieve).toThrow('Error');
    expect(res.body).toHaveProperty('error', 'Error');
    done();
  });
});

第二项测试

describe('Create ACH', () => {
  beforeEach(() => {
    jest.mock('customers');
  });

  afterEach(() => {
    jest.clearAllMocks();
  });

  it('POST /ach - responds with 200 after success', async (done) => {      
    const res = await request.post('/ach').send(data);

    expect(res.statusCode).toBe(200);
    expect(customers.retrieve).toHaveBeenCalledTimes(1);
    expect(res.body).toHaveProperty('status', 'success');
    done();
  });
});

0 个答案:

没有答案