【问题标题】:Can I run Jasmine tests through Mocha我可以通过 Mocha 运行 Jasmine 测试吗
【发布时间】:2018-02-02 20:52:32
【问题描述】:

正如标题所说,我希望能够在节点上使用 Mocha 运行 Jasmine 测试。作为一个实验,我安装了 Jasmine 和 Mocha 并运行了

jasmine examples

安装示例。

Running Jasmine 按预期运行测试:

$ ./node_modules/jasmine/bin/jasmine.js
Started
.....


5 specs, 0 failures
Finished in 0.012 seconds

但是在 Mocha 中运行测试不起作用:

$ ./node_modules/mocha/bin/mocha spec/jasmine_examples/PlayerSpec.js

0 passing (11ms)
5 failing

1) Player
   should be able to play a Song:
   ReferenceError: expect is not defined
   at Context.<anonymous> (spec\jasmine_examples\PlayerSpec.js:14:5)

等

同样,如果我尝试在测试中添加对 jasmine.createSpy() 的调用,它在 Jasmine 下可以正常工作,但在 Mocha 下它会报告

ReferenceError: jasmine is not defined

也许我不应该完全感到惊讶,但由于我是这个 Javascript 世界的新手,有人可以向我解释如何让它工作或为什么它不起作用?

如果有人想知道我为什么要这样做,作为一个团队,我们使用 Jasmine,但我使用 IntelliJ 作为我的 IDE。这不了解 Jasmine 测试,因此我必须手动创建运行配置来运行特定测试。如果我能让它们在 Mocha 下运行,我可以使用内置的 Mocha 支持,只需单击 IntelliJ 放置在 Mocha 测试旁边的小箭头。

【问题讨论】:

    标签: javascript jasmine mocha.js


    【解决方案1】:

    Jasmine 和 Mocha 之间存在表面上的相似之处(describe、it 等),但如果您想在两者下运行套件,则必须弥合许多差异。您不能使用 Jasmine 套件并通常期望它无需修改即可在 Mocha 中工作。 Jasmine 不是为运行 Mocha 测试而设计的,而 Mocha 也不是为运行 Jasmine 测试而设计的。

    例如 Mocha 不能对 jasmine.createSpy() 做任何事情。它甚至没有内置于 Mocha 本身的等价物。如果您要将您的套件移植到 Mocha(即放弃 Jasmine 转而使用 Mocha),您必须使用像 Sinon 这样的库来提供类似的功能。如果你想让你的套件同时在 Mocha 和 Jasmine 中运行,那么你可以使用一个包装库来弥补差距,该库检测它在哪个运行器下运行,并根据需要调用 jasmine.createSpy() 或 Sinon 等价物,但任何非-琐碎的测试套件所需的工作将是大量的。 (坦率地说,我从事的任何项目都无法证明其花费是合理的。)

    您还必须使用像 Chai 这样的库来提供 expect。

    【讨论】:

    • 我很欣赏存在显着差异。我正在努力理解的是,摩卡跑步者到底在做什么阻止它看到茉莉花的方法?如果这些是 Java 框架,那么只要 Mocha 和 Jasmine 在类路径上,它可能就可以正常工作。我很难充分理解正在发生的事情,为什么它不只是加载相关的 javascript 文件并调用 Jasmine 方法。
    • 当您运行jasmine 时,CLI 工具会故意操纵全局空间以放置具有createSpy 等方法的jasmine 对象。与describe、it 以及不属于 Node 提供的默认全局空间但自动出现在那里的任何内容相同。当您在 CLI 上运行 mocha 时,Mocha 会对其提供的功能执行相同的操作。仅仅安装 Jasmine 或 Mocha 不会导致项目中执行的每个文件都能看到 Jasmine 或 Mocha 的全局变量,您必须使用它们提供的相应 CLI 工具。
    • 确实如此。这对我所看到的行为是有道理的。添加 --require jasmine 至少可以使期望方法起作用,但不能使 jasmine.spy 方法起作用。我得开始挖掘源头了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多