Esperando uma exceção no nó Jasmine

Pode não ser imediatamente óbvio porque quando você escreve algum código coffeescript usando jasmine-node como:

it 'myFunction should throw an exception if passed 3', ->
myFunction
= ->
throw new Error 'argument cannot be 3'
expect
(myFunction 3).toThrow 'argument cannot be 3'

que não funciona, em vez de mostrar:

Failures:

1) myFunction should throw an exception if passed 3
Message:
Error: argument cannot be 3
Stacktrace:
Error: argument cannot be 3
at myFunction
...

Talvez pudéssemos colocar uma cláusula try / catch em nosso código, mas então qual é o ponto de usar o matcher toThrow ()?

A chave aqui é perceber que o matcher está esperando uma função para avaliar, mas em vez disso, passamos a ele o resultado da avaliação de uma função – então, em vez disso, precisamos envolver nossa avaliação com um lambda assim:

it 'myFunction should throw an exception if passed 3', ->
expect
( -> myFunction 3).toThrow 'argument cannot be 3'

Isso agora funciona conforme o esperado.