我正在使用jest.js,我正在测试一个函数,看它是否需要日期对象的参数。有没有办法测试这个。
示例:
export function setEndDate(date){
// do something with the date object passed in.
}
在我的test.js
中test('setEndDate method should have a date object param', ()=>{
// test that the method will allow only one parameter
// if possible test that it excepts param of type date object
});
答案 0 :(得分:3)
你可以使用rest参数或instanceof
并检查函数只传递了一个参数,当function setDate(...args) {
let date = args[0];
let len = args.length === 1;
return !!(date && len && date instanceof Date);
}
console.log(setDate()); // false
console.log(setDate(new Date())); // true
console.log(setDate(new Date(), 123)); // false
用于评估参数时,该参数等于operator double()
double y = static_cast<double>(x)
&#13;
答案 1 :(得分:0)
Javascript函数将接受您(不要)给出的任何数量的参数。它们也可以是任何类型。如果你想强制限制,你必须自己编写这个逻辑。可能类似于以下内容。
function setEndDate(date){
if (Object.keys(arguments).length != 1) throw new Error("Argument count incorrect");
if (!(date instanceof Date)) throw new Error("date must be a Date");
console.log("It's all good!");
}
try { setEndDate() } catch ( e ) { console.log( e.message ); }
try { setEndDate(7, 5) } catch ( e ) { console.log( e.message ); }
try { setEndDate(7) } catch ( e ) { console.log( e.message ); }
try { setEndDate(new Date()) } catch ( e ) { console.log( e.message ); }
&#13;
答案 2 :(得分:0)
断言该方法在给定非Date参数时抛出错误,或者在传递两个参数时抛出错误(不确定为什么要在完全传递多个参数时强制它为Throw)。
test('setEndDate method should have a date object param', ()=>{
expect(setEndDate({})).toThrow();
expect(setEndDate(null)).toThrow();
expect(setEndDate(1)).toThrow();
expect(setEndDate('asdf')).toThrow();
expect(setEndDate(new Date(), new Date())).toThrow();
});