开玩笑模拟第一次在监视模式下运行后未重置

时间:2019-08-15 17:23:30

标签: javascript unit-testing testing mocking jestjs

这是代码的样子。

import * as request from 'supertest';

import { App } from '../../app';
import { sign } from '~lib/token-utils';

jest.mock('~lib/token-utils', () => ({
  sign: jest
    .fn()
    .mockImplementation(() => {
      return Promise.resolve('asdf');
    }),
}));

describe('test', () => {
  const app = new App().express;
  const agent = request.agent(app);

  beforeEach(() => {
    sign.mockClear();
  });

  it('signs string into token', (done) => {
    agent
      .post('/token/sign')
      .send({ token: 'asdf' })
      .end((err, res) => {
        expect(res.status).toEqual(200);
        expect(sign).toHaveBeenCalledWith('asdf');
        done();
      });
  });
});

我从模块中模拟了sign方法,并调用了expect这个模拟函数。

我遇到的问题是在监视模式下运行Jest时。该测试在第一次运行时就通过了,但是在第一次运行后就没有在所有其他测试中失败,因为没有调用模拟函数sign

mockClear似乎不能解决此问题。

我模拟函数的方式或清除模拟的方式是否存在问题?

0 个答案:

没有答案