这是代码的样子。
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
似乎不能解决此问题。
我模拟函数的方式或清除模拟的方式是否存在问题?