Ich habe eine Datei app.coffee
:Mokka, should.js und eine Ausnahme behauptet
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
und eine Datei namens 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."
Wenn ich diesen Befehl im Terminal ausführen: mocha -r should --compilers coffee:coffee-script -R spec
Ich habe ein fehlender Test (der letzte), der besagt, dass eine Ausnahme erwartet wurde. "Abhängige Aufgabe, Geschirr spülen" ist nicht abgeschlossen. " aber wurde 'undefiniert'.
Wenn ich (-> task2.complete()).should.throw
zu -> task2.complete().should.throw
durch Entfernen der Klammern ändern, wird der Test bestanden, und schlägt fehl, wenn ich die Ausnahme nicht auslösen. Aber wenn ich die Ausnahmebedingungsnachricht in etwas zufälliges ändere, übergibt es noch. Mache ich etwas falsch? Sollte der Test nicht bestanden werden, wenn die Nachricht wörtlich "abhängige Aufgabe 'Geschirr spülen' ist nicht abgeschlossen."?
Sind Sie sicher, "Geschirr spülen" ist '' 'parent.name'''? Ich würde Eigenschaften in jedem Testschritt neu deklarieren. Sie könnten vorher in Ihrem Test verwenden. – vik
@vik Ja, es ist 'parent.name'. Ich habe versucht, jede Eigenschaft in beforeEach() neu zu deklarieren und immer noch das gleiche Problem zu haben. Die letzte Behauptung wird "undefiniert". – Matthew