【问题标题】:Mocha - coffeescript syntaxMocha - 咖啡脚本语法
【发布时间】:2014-01-20 04:11:51
【问题描述】:

我正在将一些 Mocha 测试从 JS 转换为 coffeescript,并且遇到了 beforeEach 函数的问题。以下是我目前拥有的,但 data 变量在测试用例中未被识别。有什么建议吗?

beforeEach ->
  data =
    name: "test name"
    to: "alice"
    from: "bob"
    object1: "foo"
    object2: "bar"

这是原文:

beforeEach(function(){
  data = {
    name: "test name",
    to: "Alice",
    from: "Bob",
    object1: "foo",
    object2: "bar"
  }
});

【问题讨论】:

  • 你提供的coffeescript和js一模一样。你在哪里使用data? coffeescript 将所有变量移动到最小范围,如果你需要在beforeEach之外的data,你必须在外面声明它。
  • @muistooshort 我在第二句话中这么说 ;)
  • @darthmaim:我说的是“您提供的咖啡脚本与 js 完全相同。”部分,也许我太挑剔了:)

标签: javascript coffeescript mocha.js


【解决方案1】:

在您的 JavaScript 版本中:

beforeEach(function(){
    data = { ... }
});

data 是一个全局变量,因为它没有明确地作用于使用var data 的函数。在您的 CoffeeScript 版本中:

beforeEach ->
  data = ...

databeforeEach 回调函数中的一个局部变量,因为那是how variables work in CoffeeScript

词法作用域和变量安全

CoffeeScript 编译器会注意确保您的所有 变量在词法范围内正确声明——你永远不需要 自己写var

你的 CoffeeScript 最终会变成这样的 JavaScript:

beforeEach(function(){
    var data = { ... }
});

data 隐藏在你看不见的地方。

一种解决方案是在beforeEach之外手动创建data

describe 'Whatever', ->
  data = null
  beforeEach ->
    data = ...

这将为您提供相同的 data 内部和外部 beforeEachdata 应该是您在每个 its 中所期望的。

另一种选择是为data 使用实例变量:

beforeEach ->
  @data = ...

然后查看its 中的@data

我更喜欢第一个版本(手动范围 datadata = null),因为您永远不知道何时会意外覆盖其他人的实例变量。

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2012-04-28
    相关资源
    最近更新 更多