2017-10-16 3 views
0

Je dois appeler expect().to.throw() sur une fonction qui prend des arguments. Par exemple, dire que je donne les résultats suivants:nœud: utiliser chai's expect.to.throw sur une fonction qui prend des arguments

var func = function(x) { 
    if (x > 1) { 
    throw new Error() 
    } else { 
    console.log('hello') 
    } 
} 
expect(func).to.throw() 

Cela échoue, car il appelle func sans argument, ce qui signifie qu'il ne sera jamais une erreur. Mais si j'appelle expect(func(2)).to.throw(), j'obtiens AssertionError: expected undefined to be a function. La fonction est appelée et la valeur de retour est transmise à expect.

Comment puis-je utiliser expect().to.throw() et donner les arguments de fonction inclus. Est le seul moyen de le faire avec une fonction anonyme, comme expect(() => {func(2)}).to.throw()?

Répondre

1

C'est du chai docs:

Si vous avez besoin d'affirmer que votre fonction fn lance lorsqu'il est passé certains arguments, puis les envelopper d'un appel à fn l'intérieur d'une autre fonction.

expect(function() { fn(42); }).to.throw(); // Function expression 
expect(() => fn(42)).to.throw();    // ES6 arrow function 
+2

'bind()' est également un bon choix. 'Attendre (fn.bind (null, 42)) to.throw()' –