问题:是否可以在CoffeeScript中手动声明变量
我目前正在开始使用CoffeeScript的单元测试,而在完成一个教程时,我来到了必须使用before()
和after()
函数的地步.虽然您可以在JavaScript中声明变量,但您无法在CoffeeScript中执行此操作.一个(但不是最佳实践)解决方案是将它们添加到窗口对象(像这样).我正在使用的代码来自http://sinonjs.org/.
这是我正在测试的代码:
describe 'Fake server', -> before(() -> server = sinon.fakeServer.create()) after(() -> server.restore()) it "calls callback with deserialized data", () -> callback = sinon.spy() getTodos(42, callback) # This is part of the FakeXMLHttpRequest API server.requests[0].respond( 200, { "Content-Type": "application/json" }, JSON.stringify([{ id: 1, text: "Provide examples", done: true }]) ) assert(callback.calledOnce)
编译为JavaScript,之前和之后的函数如下所示:
before(function() { var server; return server = sinon.fakeServer.create(); }); after(function() { return server.restore(); });
如您所见,变量服务器在before函数中声明,因此不能在错误的范围之外使用.
server = undefined # or null, or false before -> server = ... after -> server.restore
虽然在Javascript中你可以做到var foo;
,但在CoffeeScript中你需要指定一些东西来创建变量.但是,因为var foo;
意味着foo
is 的值undefined
,只需指定undefined
创建相同的效果.