导出所需的同一对象会混淆mocha

时间:2013-10-15 14:38:19

标签: node.js coffeescript mocha

我正在开发一个使用mocha运行单元测试的节点应用。

当我运行此命令时:

mocha --compilers coffee:coffee-script --reporter spec ./test/unit/*-test.coffee

我收到此错误:

ERROR: Unknown option --compilers

似乎摩卡很困惑,因为它肯定有一个编译器选项。当我向项目添加新文件时,会发生此错误。这是我可以获得mocha生成的唯一输出。 --debug什么都不做。

假设我有一个名为person的软件包。我想全局配置这个包,以便我可以在项目的任何地方导入配置的对象。为此,我导入person,将其配置为驱动程序,然后再次导出。

但是,当我导入它时(在Car.coffee或Car-test.coffee中),mocha失败并出现上述错误。

Driver.coffee

driver = require 'person'
driver.setSkill "Drive"

module.exports = driver

Car.coffee

driver = require './driver'
...

Car-test.coffee

driver = require '../../src/driver'
...

请注意,如果我只是使用coffee编译并运行节点项目,这样可以正常工作。在那里导入它没有问题。但是当我使用mocha运行时,如果我导入文件则会失败。

我无法确定错误。这似乎就像摩卡中的一个错误,但也许我通过导出我导入的同一个对象做了一些“坏”的事情,而节点只是更宽容了?

我正在使用最新版本的mocha(1.13.0)。谢谢!

修改

这不能解决错误,并且在语法方面并不理想:

person = require 'person'

class driver
  constructor: ->
    person.setSkill "Drive"
    @person = person

module.exports = driver

请注意,将其简单地包装在普通对象中是行不通的。

编辑2:

这是其他不起作用的东西:

configure-driver.coffee

configureDriver = (person) ->
  person.setSkill "Drive"

module.exports = configureDriver

car.coffee

driver = require('./configure-driver')(require 'person')

Mocha会抛出与以前相同的错误。

2 个答案:

答案 0 :(得分:2)

也许有点晚了,但希望它会帮助某人(我花了一个小时来翻阅mocha的源代码来跟踪它)。

尝试使用该命令(重要位是--compilers之后的等号):

mocha --compilers=coffee:coffee-script --reporter spec ./test/unit/*-test.coffee

我在尝试使用 grunt-mocha-istanbul 和coffeescript测试定义创建新的grunt test时遇到了这个错误。奇怪的是,如果我直接在我的shell中运行命令它可以工作,但是使用grunt任务我得到了和你一样的错误。

答案 1 :(得分:0)

似乎摩卡使用指挥官而且它是全球性的。在我的情况下,我在测试目录下有一个使用commander的脚本。看起来Mocha执行测试脚本,解析mocha.opts,然后执行规范。为了解决这个问题,我只是使用指挥官从测试目录中移动脚本,一切都很好。