【问题标题】:How to reach moment timestamp lines in a function如何在函数中到达时刻时间戳行
【发布时间】:2020-06-11 09:56:44
【问题描述】:

我有一个“dateRange”函数,开始日期和结束日期格式不同

dateRangeSelected = (event, value) => {
        if (event && event.length == 2 && value === 'rangeSelected')
        {
            let statDateTime = new Date(event[0]);
            let selectedTime = moment().format('hh:mm');
            let startDate = moment(moment(statDateTime).format('YYYY-MM-DD') + " " + selectedTime);

            this.setState({startDate : startDate });
        }
    }

我在开玩笑地写测试用例。我写了这些行来实现这个功能

const components = new myComponent({ ...props });
components.dateRangeSelected(event, value);

我可以使用该功能,但这些矩线在覆盖文件中显示为未覆盖。 任何想法如何做到这一点。 提前致谢。

【问题讨论】:

    标签: reactjs jestjs react-testing-library


    【解决方案1】:

    我会提取逻辑来分离函数。

    dateRangeSelected = (event, value) => {
      if (event && event.length == 2 && value === 'rangeSelected') {
        const startDate = getStartDate(event[0]);
        this.setState({startDate});
      }
    }
    
    const getStartDate = (event) => {
      const date = moment(event);
      const currentDate = moment();
      date.set({
        hour: currentDate .hour(),
        minute: currentDate.minute()
       });
      return date;
    }
    

    示例测试

    const {
      core: {
        beforeEach,
        describe,
        it,
        expect,
        run
      },
    } = window.jestLite;
    
    const getStartDate = (event) => {
      const date = moment(event);
      const currentDate = moment();
      date.set({
        hour: currentDate.hour(),
        minute: currentDate.minute()
       });
      return date;
    }
    
    describe("moment", () => {
      const currentDate = new Date();
    
      beforeEach(() => {
          moment.now = () => currentDate;
      });
      
      it("returns hours and minutes", () => {
        const date = moment('2100-06-11 10:10:00')
        
        expect(date.hour()).toBe(10);
        expect(date.minute()).toBe(10);
      })
    
      it("returns date with current time", () => {    
        expect(moment(currentDate).toDate().toString()).toBe(currentDate.toString());
      })
      
      it("returns date with changed time", () => {   
        const date = moment(currentDate);
        date.set({
          hour: 10,
          minute: 10
         });
       
        expect(moment(date).format("hh:mm")).toBe("10:10");
      })
    })
    
    describe("getStartDate", () => {
      const currentDate = new Date();
    
      beforeEach(() => {
          moment.now = () => currentDate;
      });
    
      it("returns date with current time", () => {    
        const startDate = getStartDate(currentDate);
        const format = "YYYY-MM-DD hh:mm";
        const expectedDateFormatted = moment().format(format);
    
        expect(startDate.format(format)).toBe(expectedDateFormatted);
      });
    
    });
    
    run().then(result => {
      console.log(result);
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>
    <script src="https://unpkg.com/jest-lite@1.0.0-alpha.4/dist/core.js"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      相关资源
      最近更新 更多