Tôi có một tập tin app.coffee
:Mocha, should.js và khẳng định một ngoại lệ
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
và một tập tin gọi 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."
Nếu tôi chạy lệnh này trong terminal: mocha -r should --compilers coffee:coffee-script -R spec
Tôi có một kiểm tra thất bại (người cuối cùng) nói rằng nó đã được mong đợi một ngoại lệ "nhiệm vụ phụ thuộc" rửa chén "không được hoàn thành." nhưng có 'không xác định'.
Nếu tôi thay đổi (-> task2.complete()).should.throw
thành -> task2.complete().should.throw
bằng cách xóa dấu ngoặc đơn, vượt qua kiểm tra và không thành công nếu tôi không loại trừ ngoại lệ. Nhưng nếu tôi thay đổi thông điệp ngoại lệ thành một cái gì đó ngẫu nhiên, nó vẫn đi qua. Tôi có làm điều gì sai? Không nên thử nghiệm chỉ vượt qua nếu thông điệp là nghĩa đen "nhiệm vụ phụ thuộc" rửa chén "không được hoàn thành."?
bạn có chắc là 'rửa chén' là '' 'parent.name''' không? Tôi sẽ redeclare tài sản trong mỗi bước kiểm tra. bạn có thể sử dụng beforeEach trong bài kiểm tra của bạn. – vik
@vik Vâng đó là 'parent.name'. Tôi đã thử redeclaring mỗi tài sản trong beforeEach() và vẫn có cùng một vấn đề. Xác nhận cuối cùng được 'undefined'. – Matthew