测试函数是否有参数

时间:2017-11-02 21:26:43

标签: javascript jquery jestjs

我正在使用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
});

3 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

Javascript函数将接受您(不要)给出的任何数量的参数。它们也可以是任何类型。如果你想强制限制,你必须自己编写这个逻辑。可能类似于以下内容。

&#13;
&#13;
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;
&#13;
&#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();
});