我有一些代码:
module.exports = {
idCheck: function(errors) {
errors.some( (error) => {
if (error.parentSchema.regexp === '/^((?!\\bMyId\\b).)*$/i') {
this._recordError('IDCHECK');
}
});
}
};
我正在尝试使用jest测试它:
const IDCheck = require(
'./IDCheck'
);
let errors = [
{
parentSchema: {
regexp: '/^((?!\\bMyId\\b).)*$/i'
}
}
];
describe('IDCheck', () => {
afterEach(() => {
jest.restoreAllMocks();
});
it('calls _recordError with IDCHECK', () => {
jest.spyOn(this, '_recordError');
IDCheck.idCheck(errors);
});
});
然而,当跑步时,我得到了
无法监视_recordError属性,因为它不是函数;取而代之的是未定义的
有没有一种方法可以模拟,测试_recordError()
已被调用,或未调用并使用正确的参数,而不将_recordError
作为参数传递?
答案 0 :(得分:1)
关于这一行的一些事项:jest.spyOn(this, '_recordError');
this
必须为IDCheck
,因为您使用的箭头函数如果之前设置了this
,则范围内没有this
(它不是console.log(this)
T)。你可以'_recordError'
在线的正上方来证明这一点。
IDCheck
不是spyOn
的方法。 _recordError
检查目标的方法,而不是其中调用的方法。现在如果IDCheck
是const IDCheck = {
idCheck: function(errors) {
return errors.map(error => {
if (error.parentSchema.regexp === '/^((?!\\bMyId\\b).)*$/i') {
return this._recordError('IDCHECK')
}
})
},
_recordError: function(data) {
return data
}
}
let errors = [
{
parentSchema: {
regexp: '/^((?!\\bMyId\\b).)*$/i'
}
}
];
describe('IDCheck', () => {
afterEach(() => {
jest.restoreAllMocks();
});
it('calls _recordError with IDCHECK', () => {
const spy = jest.spyOn(IDCheck, '_recordError')
const check = IDCheck.idCheck(errors).includes('IDCHECK')
expect(spy).toHaveBeenCalled()
expect(check).toBe(true)
});
});
的方法,那么你应该没问题。
最后,您基本上必须返回所需的数据才能进行验证。除非你把它归还,否则没有真正的方法可以检查通过的内容。
这是我提出的解决方案,其中不包含您必须实施的一些修复,以解决潜在的工作流程缺陷。
rollapplyr