【发布时间】:2016-01-28 05:00:59
【问题描述】:
我正在对接收日期作为变量的组件进行单元测试。我的测试失败了,因为实际和预期对象中的 ate 变量不断向日期值添加几毫秒。
describe('Clock',()=>{
it('works',()=>{
let renderer = createRenderer();
let date = new Date();
renderer.render(<Clock time={ date}> </Clock>);
let actualElement = renderer.getRenderOutput();
let expectedElement = <FormattedTime value={date} hour="numeric" minute="numeric" second="numeric" />;
expect(actualElement).toEqual(expectedElement);
});
});
当我运行我的测试时。在上面,它显示了expectedElement date 增加了几毫秒。
- "value": [Date: 2016-01-28T04:48:57.000Z]
+ "value": [Date: 2016-01-28T04:48:57.893Z]
请问我如何计算日期?或者更好地摆脱毫秒。我尝试了很多选项,例如
let date = Math.floor(new Date().getTime()/1000);
let rTime = new Date(date * 1000);
renderer.render(<Clock time={ rTime}> </Clock>);
let actualElement = renderer.getRenderOutput();
let expectedElement = <FormattedTime value={rTime} hour="numeric" minute="numeric" second="numeric" />;
任何帮助将不胜感激。
更新 你好,下面是我要求的时钟。 导出默认类 Clock 扩展 React.Component {
constructor(props) {
super(props);
this.state = {
time: new Date(),
};
}
componentDidMount() {
this.interval = setInterval(() => this.setState({ time: new Date() }), 1000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
const { time } = this.state;
return (
<FormattedTime value={time} hour="numeric" minute="numeric" second="numeric" />
);
}
}
我使用下面建议的date.setMilliseconds(0),然后我意识到时钟组件返回 0。所以我不得不将我的测试更改为下面的测试。
describe('Clock',()=>{
it('works',()=>{
let renderer = createRenderer();
let date = new Date();
date.setMilliseconds(0)
renderer.render(<Clock time={ date}> </Clock>);
let actualElement = renderer.getRenderOutput();
let expectedElement = <FormattedTime value={date} hour="numeric" minute="numeric" second="numeric" />;
actualElement.props.value.setMilliseconds(0);
expect(actualElement).toEqual(expectedElement);
});
});
现在它的工作。感谢您的时间。顺便说一句,我正在运行并使用 reacjs 和 react-addons-test-utils lib 进行测试。
【问题讨论】:
-
请告诉我们负责渲染的代码,例如
Clock、FormattedTime和renderer。 -
你在什么环境下运行这个?
-
date.setMilliseconds(0)就足够了;但没有摆脱毫秒工作? -
@Bergi 现在可以使用了。感谢您的宝贵时间。
标签: javascript unit-testing date reactjs