Javascript 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

问题:是否可以在CoffeeScript中手动声明变量

我目前正在开始对CoffeeScript进行单元测试,在学习一个教程时,我不得不使用
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