测试时间与酶

问题描述:

我想创建一个测试,我不能让它工作,因为当我在测试环境中做moment("2017-09-10")它不会创建一个Moment对象。正因为如此,isBetween总是错误的。测试时间与酶

这是我的功能

export const filteredStatistics = (data, startDate, endDate) => { 
    if(startDate === null || endDate === null) return data.toJS() 

    return data.filter(element => { 
    const date = moment(element.get("date")) 

    return date.isBetween(startDate, endDate, "days", "[]") 
    }).toJS() 
} 

这是我的测试

import moment from 'moment' 

describe('all dates',() => { 
    it('returns original statistics',() => { 
     const statistics = getOverviewStatistics('ctr')(overview) 
     const statDate = moment(statistics.first().get('date')) 
     const endDate = moment(statistics.last().get('date')) 

     const current = filteredStatistics(statistics, statDate, endDate) 
     const expected = statistics.toJS() 

     expect(current).toEqual(expected) 
     }) 
    }) 

我使用的是 “时刻”: “^ 2.19.1”, “酶”:“^ 2.9.1 “,”反应“:”^ 15.4.1“。 你知道我该如何测试它?

打印与所述对象之间的差产生运行代码和运行测试

的的console.log:

console.log('date:', date, 'startDate:', startDate, 'endDate', endDate, 'betweenResult:', date.isBetween(startDate, endDate, 'days', '[]')) 

运行代码:
enter image description here

运行试验:

enter image description here

PS:我更新为使用给定的建议

我发现错误的代码:我把结束日期2016和2017年不u.u”对不起,并感谢大家的帮助!

+0

它会抛出一个错误?你如何定义测试时机? – jmargolisvt

+0

@jmargolisvt它不会引发错误。它只是不通过,因为返回一个empy数组。我定义这样的时刻:从'时刻'进口时刻 – Marina

  1. 更新到时刻2.19.1。有2.19.0的问题可能会影响您的导入。

  2. 请勿使用moment(new Date(string))。这绕开了Moment的解析功能,并使用对象的解析来代替 - 这是低劣的并且经常不一致。只需使用moment(string),或者使用moment(string, format)

+0

你好,谢谢你的回应,但它没有工作:(我更新了时刻到2.19.1,并删除了新的日期(字符串),并得到了相同结果:/我发现这篇文章解释了这个问题,但我不想嘲笑我将使用的每一个日期。文章:http://dancork.co.uk/2015/12/07/ stubbing-moment/ – Marina

+0

A添加一些图像以显示运行代码的结果并运行测试以帮助解释问题 – Marina

+0

您的图像来自哪里有点混淆,但对于我可以看到的值,“false”会是“date”不在'startDate'和'endDate'之间 –