をアサート:モカ、should.jsと私はファイル<code>app.coffee</code>持っ例外
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
とファイルが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."
私はターミナルで次のコマンドを実行した場合:mocha -r should --compilers coffee:coffee-script -R spec
私が持っています例外的に「依存するタスク「洗車」が完了していない」と予想していたことを意味する失敗テスト(最後のもの)。しかし「未定義」を得た。
括弧を削除して(-> task2.complete()).should.throw
から-> task2.complete().should.throw
に変更すると、テストは合格し、例外をスローしないと失敗します。しかし、例外メッセージをランダムなものに変更しても、それはまだ通り過ぎます。私は何か間違っているのですか?メッセージが文字通り "依存するタスク 'ウォッシュディッシュ'が完了していない場合、テストは合格しないでください。"
あなたは確かに '洗面台'は '' 'parent.name'''ですか?私は各テストステップでプロパティを再宣言します。あなたはあなたのテストでbeforeEachを使うことができます。 – vik
@vikうん、それは 'parent.name'です。私はbeforeEach()の各プロパティを再宣言しても同じ問題があります。最終的なアサーションは 'undefined'になります。 – Matthew