2017-02-15 7 views
0

У меня есть простая функция в Javascript;Тестирование функции, которая вычисляет возраст от dob

export default function getPupilAge(dob) { 
    let a = moment(); 
    let b = moment(dob); 
    return a.diff(b, 'months'); 
}; 

Я пытаюсь написать тесты (я использую AVA).

Я хотел бы написать тест, в котором говорится, что «дата дата возвращается 23 месяца», но let a = moment(); - это сегодняшняя дата, поэтому возвращаемое количество месяцев со временем изменится.

Как написать этот тест или реорганизовать мою функцию, чтобы обеспечить возможность тестирования?

+0

что вы думаете об этом не подлежит испытанию, как написано? Кроме того, вы используете платформу тестирования, такую ​​как jasemine? – terpinmd

ответ

1

Вашей функции кажется вычислить возраст в месяцах (он использует diff из moment() с 'months' параметром), так что вы можете передать moment().subtract(23, 'month');, что это текущая дата минус 23 месяцев (см subtract документов) , В этом случае getPupilAge всегда будет 23.

Вот живой пример:

function getPupilAge(dob) { 
 
    let a = moment(); 
 
    let b = moment(dob); 
 
    return a.diff(b, 'months'); 
 
}; 
 

 
let dob = moment().subtract(23, 'month'); 
 
console.log(getPupilAge(dob));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

+0

Большое спасибо. Это простое решение, которое мне нужно. – leonormes

1

Вы можете использовать Sinon подделать дату и время.
, например.

import test from 'ava'; 
import sinon from 'sinon'; 

function getPupilAge(dob) { 
    let a = moment(); // here the date will be 2016-12-01T06:00:00.000Z 
    let b = moment(dob); //here the date will be what you have specified in dob 
    return a.diff(b, 'months'); 
} 

test('fake dates', t => { 
    sinon.useFakeTimers(new Date(2016,11,1).getTime()); 

    const result = getPupilAge("20170620"); 

    t.is(result,6) //example 


}); 

В функции при вызове момента() вы получите поддельную дату.

Смежные вопросы