日期对象值是更改 - JavaScript

时间:2016-01-28 05:01:00

标签: javascript unit-testing date reactjs

我正在对接收日期作为变量的组件进行单元测试。我的测试失败,因为实际和预期对象中的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" />;

任何帮助将不胜感激。

更新 嗨,下面是我要求的时钟。     export default class Clock extends 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),然后我意识到Clock组件返回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);
    });
});

现在它的工作。感谢您的时间。顺便说一句,我正在运行并重新启动并react-addons-test-utils lib进行测试。

1 个答案:

答案 0 :(得分:1)

要摆脱毫秒,只需将它们设置为零:&#39; date.setMilliseconds(0)&#39;

请参阅MDN reference