2017-11-02 9 views
0

私はjest.jsを使用しています。関数に日付オブジェクトのパラメータが必要かどうかを調べています。これをテストする方法はありますか?関数にパラメータがあるかどうかをテストする

例:私の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

複数の要素、または日付以外の要素が渡された場合、どのようにエラーになるでしょうか? – Taplar

+1

パラメータはJavaScriptの型によって制限されません。また、関数は宣言に関係なく、常に任意の数のパラメータを受け入れることができます。 – Pointy

答えて

3

あなたは残りのパラメータやargumentsを使用して、関数が渡された引数を1つしか持って確認することができますし、その引数で

export function setEndDate(date){ 
    // do something with the date object passed in. 
} 

Dateinstanceofに等しいです引数を評価するために使用されます。

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

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); }

0

アサート正確に)。

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(); 
}); 
関連する問題