Tengo un archivo app.coffee
:Mocha, should.js y haciendo valer una excepción
class TaskList
class Task
constructor: (@name) ->
@status = 'incomplete'
complete: ->
if @parent? and @parent.status isnt 'completed'
throw "Dependent task '#{@parent.name}' is not completed."
@status = 'complete'
true
dependsOn: (@parent) ->
@parent.child = @
@status = 'dependent'
# Prepare scope stuff
root = exports ? window
root.TaskList = TaskList
root.Task = Task
y un archivo llamado test/taskTest.coffee
:
{TaskList, Task} = require '../app'
should = require 'should'
describe 'Task Instance', ->
task1 = task2 = null
it 'should have a name', ->
something = 'asdf'
something.should.equal 'asdf'
task1 = new Task 'feed the cat'
task1.name.should.equal 'feed the cat'
it 'should be initially incomplete', ->
task1.status.should.equal 'incomplete'
it 'should be able to be completed', ->
task1.complete().should.be.true
task1.status.should.equal 'complete'
it 'should be able to be dependent on another task', ->
task1 = new Task 'wash dishes'
task2 = new Task 'dry dishes'
task2.dependsOn task1
task2.status.should.equal 'dependent'
task2.parent.should.equal task1
task1.child.should.equal task2
it 'should refuse completion it is dependent on an uncompleted task', ->
(-> task2.complete()).should.throw "Dependent task 'wash dishes' is not completed."
Si ejecuta este comando en el terminal: mocha -r should --compilers coffee:coffee-script -R spec
que tienen una prueba de falla (la última) diciendo que esperaba una excepción "La tarea dependiente no lava los platos". pero fue 'indefinido'.
Si cambio (-> task2.complete()).should.throw
a -> task2.complete().should.throw
quitando el paréntesis, se supera la prueba, y falla si no arrojo la excepción. Pero si cambio el mensaje de excepción a algo aleatorio, todavía pasa. ¿Estoy haciendo algo mal? ¿No debería pasar la prueba solo si el mensaje es literalmente "Tarea dependiente" no se completa el lavado de platos? "?
¿Estás seguro de que 'lavar los platos' es '' 'parent.name'''? Volvería a declarar propiedades en cada paso de prueba. podrías usar beforeEach en tu prueba. – vik
@vik Sí, es 'parent.name'. Intenté volver a definir cada propiedad en beforeEach() y todavía tengo el mismo problema. La afirmación final obtiene 'undefined'. – Matthew