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.