Javascript CoffeeScript-手动声明变量
问题:是否可以在CoffeeScript中手动声明变量 我目前正在开始对CoffeeScript进行单元测试,在学习一个教程时,我不得不使用Javascript CoffeeScript-手动声明变量,javascript,unit-testing,scope,coffeescript,Javascript,Unit Testing,Scope,Coffeescript,问题:是否可以在CoffeeScript中手动声明变量 我目前正在开始对CoffeeScript进行单元测试,在学习一个教程时,我不得不使用before()和after()函数。虽然可以在JavaScript中声明变量的位置,但在CoffeeScript afaik中不能这样做。 一个(但不是最佳实践)解决方案是将它们添加到窗口对象()。我使用的代码来自 这是我正在测试的代码: describe 'Fake server', -> before(() -> server = si
before()
和after()
函数。虽然可以在JavaScript中声明变量的位置,但在CoffeeScript afaik中不能这样做。
一个(但不是最佳实践)解决方案是将它们添加到窗口对象()。我使用的代码来自
这是我正在测试的代码:
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和after函数如下所示:
before(function() {
var server;
return server = sinon.fakeServer.create();
});
after(function() {
return server.restore();
});
如您所见,变量server是在before函数中声明的,因此不能在错误的范围之外使用
在Javascript中,您可以执行
var-foo代码>,在CoffeeScript中,您需要分配一些内容来创建变量。但是由于var-foo
表示foo
的值是未定义的
,只需分配未定义的
即可创建相同的效果。服务器。请求[0]
行应该失败,因为服务器
在该点未初始化,不。。。!?这是正确的,我似乎没有让它工作,但这是后面的一个问题,您提到的解决方案(在其他代码上)可以很好地使用相同的前后结构。正是因为这个失败,我需要在before()
函数之前初始化server
。谢谢,这就是我要找的。之前我尝试过server=null,但它不起作用。但是有了这个确认,我知道一定是我的密码错了。
server = undefined # or null, or false
before -> server = ...
after -> server.restore