我一直在学习coffeescript,作为学习它的练习,我决定使用TDD Conway's Game of Life。我选择的第一个测试是创建一个Cell,看看它是死还是活。为此,我创建了以下coffeescript:
class Cell
@isAlive = false
constructor: (isAlive) ->
@isAlive = isAlive
die: ->
@isAlive = false
然后我使用以下代码创建一个Jasmine测试文件(这是一个故意测试失败的测试):
Cell = require '../conway'
describe 'conway', ->
alive = Cell.isAlive
cell = null
beforeEach ->
cell = new Cell()
describe '#die', ->
it 'kills cell', ->
expect(cell.isAlive).toBeTruthy()
但是,当我在Jasmine中运行测试时,出现以下错误:
cell is not defined
堆栈跟踪:
1) kills cell
Message:
ReferenceError: cell is not defined
Stacktrace:
ReferenceError: cell is not defined
at null.<anonymous> (/Users/gjstocker/cscript/spec/Conway.spec.coffee:17:21)
at jasmine.Block.execute (/usr/local/lib/node_modules/jasmine-node/lib/jasmine-node/jasmine-2.0.0.rc1.js:1001:15)
当我执行coffee -c ./spec/Conway.spec.coffee
并查看生成的JavaScript文件时,我看到以下内容(第17行,第21列是错误):
// Generated by CoffeeScript 1.3.3
(function() {
var Cell;
Cell = require('../conway');
describe('conway', function() {
var alive, cell;
alive = Cell.isAlive;
cell = null;
return beforeEach(function() {
return cell = new Cell();
});
});
describe('#die', function() {
return it('kills cell', function() {
return expect(cell.isAlive).toBeTruthy(); //Error
});
});
}).call(this);
我的问题是,据我所知,cell
已定义。我知道我错了(因为SELECT is not broken
),但我想知道我搞砸了哪里。如何使用coffescript诊断此错误并找出出错的地方?
我研究过许多coffeescript应用程序中包含的源代码,包括this one,但源代码格式完全相同,声明相同。
答案 0 :(得分:4)
这是一个缩进问题,here's your fix:
Cell = require '../conway'
describe 'conway', ->
alive = Cell.isAlive
cell = null
beforeEach ->
cell = new Cell()
describe '#die', ->
it 'kills cell', ->
expect(cell.isAlive).toBeTruthy()
如果您查看已编译的JavaScript,则会有describe
块,其中包含beforeEach
。但是你的下一个describe
区块(你想要位于第一个区域内)实际上是而不是 - 它在外面。
这是因为第二个describe
的缩进只是一个空格,而不是两个空格。