Jest 测试仅在覆盖范围内失败
Jest tests failing only with coverage
我有一个问题,如果我 运行 我的测试没有 --coverage
选项,一切都会通过,但是一旦我 运行 jest
使用 --coverage
选项 我的一些测试失败了。
这是日志:
Button › Primary button › should render a primary button
undefined:3:457: property missing ':'
at Object.it (src/components/Buttons/Button/Button.test.js:13:24)
at Promise.resolve.then.el (node_modules/p-map/index.js:46:16)
测试:
it('should render a primary button', () => {
const props = { primary: true };
const rendered = renderer.create(<Button { ...props }>Some Button</Button>).toJSON();
expect(rendered).toMatchSnapshot();
});
失败的行是expect(rendered).toMatchSnapshot();
有人有什么想法吗?
我解决了这个问题。但我认为这是一个非常具体的问题。
我们正在使用样式组件,我做了这样的事情:
const BaseButton = styled.button`
${ noTouchDevice && `
:hover {
cursor: ${ ({ disabled }) => (disabled ? 'not-allowed' : 'initial') };
}
` }
`;
这是行不通的,因为嵌套的模板文字不像外部模板那样由样式化组件处理。这意味着如果 styled-components 在外部字符串文字中找到一个函数,它会调用它并将组件道具作为参数传递。但是嵌套的模板文字不会像这样处理。
这就是为什么在快照中我得到这样的东西:
.c0:hover {
cursor: ({ disabled }) => disabled ? 'not-allowed' :'initial';
}
而不是
.c0:hover {
cursor: not-allowed;
}
只是 运行 测试工作正常,但是通过覆盖率收集,它在比较快照时失败了。
所以我只是将我的代码更改为只使用像
这样的三元运算符
const BaseButton = styled.button`
${ noTouchDevice && `
:hover {
cursor: ${ disabled ? 'not-allowed' : 'initial' };
}
` }
`;
而且效果很好。
我仍然不知道的是,为什么只在收集覆盖率时才发生错误。老实说,我还不想投入更多时间,但我认为这与在 jest/istanbul 收集覆盖率时如何调用测试有关。
我有一个问题,如果我 运行 我的测试没有 --coverage
选项,一切都会通过,但是一旦我 运行 jest
使用 --coverage
选项 我的一些测试失败了。
这是日志:
Button › Primary button › should render a primary button
undefined:3:457: property missing ':'
at Object.it (src/components/Buttons/Button/Button.test.js:13:24)
at Promise.resolve.then.el (node_modules/p-map/index.js:46:16)
测试:
it('should render a primary button', () => {
const props = { primary: true };
const rendered = renderer.create(<Button { ...props }>Some Button</Button>).toJSON();
expect(rendered).toMatchSnapshot();
});
失败的行是expect(rendered).toMatchSnapshot();
有人有什么想法吗?
我解决了这个问题。但我认为这是一个非常具体的问题。
我们正在使用样式组件,我做了这样的事情:
const BaseButton = styled.button`
${ noTouchDevice && `
:hover {
cursor: ${ ({ disabled }) => (disabled ? 'not-allowed' : 'initial') };
}
` }
`;
这是行不通的,因为嵌套的模板文字不像外部模板那样由样式化组件处理。这意味着如果 styled-components 在外部字符串文字中找到一个函数,它会调用它并将组件道具作为参数传递。但是嵌套的模板文字不会像这样处理。
这就是为什么在快照中我得到这样的东西:
.c0:hover {
cursor: ({ disabled }) => disabled ? 'not-allowed' :'initial';
}
而不是
.c0:hover {
cursor: not-allowed;
}
只是 运行 测试工作正常,但是通过覆盖率收集,它在比较快照时失败了。
所以我只是将我的代码更改为只使用像
这样的三元运算符const BaseButton = styled.button`
${ noTouchDevice && `
:hover {
cursor: ${ disabled ? 'not-allowed' : 'initial' };
}
` }
`;
而且效果很好。
我仍然不知道的是,为什么只在收集覆盖率时才发生错误。老实说,我还不想投入更多时间,但我认为这与在 jest/istanbul 收集覆盖率时如何调用测试有关。