【问题标题】:How to specify test directory for mocha?如何为 mocha 指定测试目录?
【发布时间】:2012-05-31 23:16:17
【问题描述】:

Mocha 默认在test 下查找测试文件,如何指定另一个目录,例如server-test?

【问题讨论】:

  • 虽然不是 100% 回答您的问题,但请查看 jaketrent.com/post/run-single-mocha-test - 我来这里是为了寻找如何运行特定的测试套件,这表明您可以使用 .only.skip 来管理您正在运行的测试。当您不想一直等待整个测试套件运行时,在开发特定功能时很重要。

标签: unit-testing node.js mocha.js


【解决方案1】:

使用这个:

mocha server-test

或者,如果您有子目录,请使用:

mocha "server-test/**/*.js"

注意使用双引号。如果省略它们,您可能无法在子目录中运行测试。

【讨论】:

  • 这对我不起作用。如果我想这样做,我必须这样做mocha test/server-test
  • 双引号问题困扰了我好久!谢谢你拯救了我的理智。向所有阅读本文的人大喊,以特别注意那些双引号。
  • 就我而言,我使用的是mocha ./**/*.test.js(因此我可以将测试文件与模块文件放在一起)。当我在文件层次结构中添加一个与其余测试不同级别的测试文件时,该模式对我停止工作,并且只会找到一个奇怪的球文件,而不是在层次结构中位于同一级别的十几个其他文件.用引号括起来修复它。
  • 或者只使用--recursive,如下所述
  • 这应该是答案!双引号救了我
【解决方案2】:

编辑:此选项已弃用:https://mochajs.org/#mochaopts


如果您仍想通过在命令行上运行 mocha 来完成此操作,但想在文件夹 ./server-tests 而不是 ./test 中运行测试,请在 ./test/mocha.opts 创建一个文件,其中包含此内容文件:

server-tests

如果您想运行该文件夹和子目录中的所有内容,请将其放入 test/mocha.opts

server-tests
--recursive

mocha.opts 是通过命令行传入的参数,因此将第一行设置为您要更改测试的目录也会从./test/ 重定向

【讨论】:

  • 这是摩擦最小的选项,恕我直言,应该是公认的答案
  • 我正在使用其中一个样板,它在下一行,可能是因为 windows,你能检查一下 once.node ./node_modules/mocha/bin/mocha $(find api -name '*-test.js') --compilers js:babel-core/register
  • 一个 gem,也可以很好地配合 Webstorm IDE mocha 调试配置,只需选择“文件模式”并将输入留空,它将使用 mocha.opts
  • 这肯定是最好的答案。很可能值得在您的答案中添加mocha.opts 文件可以放置在您想要的任何位置,然后只需执行mocha 指定其配置文件的路径,例如:mocha --opts ./mocha.opts
  • 你也可以把 --recursive 放在 mocha 命令行中,如果你在 package.json 中定义测试脚本很有用
【解决方案3】:

这是一种方法,如果您的测试文件夹中有子文件夹,例如

/test
/test/server-test
/test/other-test

然后在linux中你可以使用find命令递归地列出所有的*.js文件并传递给mocha:

mocha $(find test -name '*.js')

【讨论】:

  • 或者只使用--recursive,如下所述
  • 也就是说mocha 没有选项可以在配置中设置所需的目录结构?
  • client user$ mocha $(find tests -name '*.js') -bash: mocha: command not found ;收到此错误。
  • 这太复杂和误导了。更喜欢 mocha 选项而不是使用操作系统命令。
  • 你的帖子没有回答问题
【解决方案4】:

这样做的好方法是在 package.json 中添加一个“测试”npm 脚本,该脚本使用正确的参数调用 mocha。这样你的 package.json 也描述了你的测试结构。它还避免了其他答案中的所有这些跨平台问题(双引号与单引号,“查找”等)

让mocha运行“test”目录下的所有js文件:

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

然后只运行冒烟测试调用:

npm test

您可以通过这种方式标准化所有项目中所有测试的运行,因此当新开发人员开始您的项目或其他项目时,他们知道“npm test”将运行测试。这有很好的历史先例(例如,Maven,大多数老派“制作”项目也是如此)。当所有项目都有相同的测试命令时,它肯定对 CI 有帮助。

同样,您可能希望 mocha 运行更快的“冒烟”测试子集:

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

然后只运行冒烟测试调用:

npm smoketest

另一种常见的模式是将您的测试放在与它们测试的源相同的目录中,但调用测试文件 *.spec.js。例如:src/foo/foo.js 由 src/foo/foo.spec.js 测试。

按照约定运行所有名为 *.spec.js 的测试:

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

然后运行所有测试调用:

npm test

看到这里的模式了吗?好的。 :) 一致性击败mura

【讨论】:

  • 我猜这是最准确的方法。
  • 为什么,为什么文档中没有这个清晰、简单的建议?
【解决方案5】:

不要使用 -g 或 --grep 选项,该模式在 it() 内部的测试名称上运行,而不是文件系统。当前的文档在这方面具有误导性和/或完全错误。要将整个命令限制为文件系统的一部分,您可以将模式作为最后一个参数(它不是标志)传递。

例如,此命令会将您的报告器设置为规范,但只会立即测试 server-test 目录内的 js 文件:

mocha --reporter spec server-test/*.js

此命令将执行与上述相同的操作,此外它只会运行测试的 it() 字符串/定义以“Fnord:”开头的测试用例:

mocha --reporter spec --grep "Fnord:" server-test/*.js

【讨论】:

    【解决方案6】:

    如果在 node.js 中,从 Mocha v6 开始的一些新配置:

    方案一:在项目根目录下创建.mocharc.json

    {
      "spec": "path/to/test/files"
    }
    

    选项 2:在项目的 package.json 中添加 mocha 属性:

    {
      ...
    
      "mocha": {
        "spec": "path/to/test/files"
      }
    }
    

    更多选项是here

    【讨论】:

      【解决方案7】:

      运行test_directory 中的所有文件,包括匹配test.js 的子目录

      find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
      

      或使用--recursive 开关

      mocha --recursive test_directory/
      

      【讨论】:

        【解决方案8】:

        现在(2020 年)您可以使用 mocha 配置文件来处理这个问题:

        第 1 步:在应用程序的根位置创建 .mocharc.js 文件

        第 2 步:在 mocha 配置文件的 code 下方添加

        'use strict';
        
        module.exports = {
          spec: 'src/app/**/*.test.js'
        };
        

        有关配置文件中的更多选项,请参阅此链接:https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js

        【讨论】:

          【解决方案9】:

          我刚才遇到了这个问题,并通过删除--recursive 选项(我已设置)并使用上面建议的相同结构来解决它:

          mochify "test/unit/**/*.js"

          这为我在/test/unit/ 下的所有目录中运行了所有测试,同时忽略了/test/ 中的其他目录

          【讨论】:

            【解决方案10】:

            正如@superjos 在 cmets 中提到的那样

            mocha --recursive "some_dir"

            【讨论】:

              【解决方案11】:

              我在 Windows 7 上使用 node.js v0.10.0 和 mocha v1.8.2 和 npm v1.2.14。 我只是想让 mocha 使用路径 test/unit 来查找我的测试, 在花了很长时间并尝试了几件事后,我登陆了,

              使用“test/unit/*.js”选项在 Windows 上不起作用。 有充分的理由,Windows shell 不会像 unixen 那样扩展通配符。

              但是使用“测试/单元”确实有效,没有文件模式。 例如。 "mocha test/unit" 运行在 test/unit 文件夹中找到的所有文件。

              这仍然只运行一个文件夹文件作为测试,但您可以传递多个目录名称作为参数。

              还可以指定完整路径和文件名来运行单个测试文件。 例如。 “摩卡测试/单元/mytest1.js”

              我实际上在 package.json 中为 npm 设置 “脚本”:{ “测试”:“摩卡测试/单元” },

              所以“npm test”运行我的单元测试。

              【讨论】:

              • 从今天开始,可以使用--recursive 选项,如下所示:mocha --recursive "some_dir"
              • 在 Windows 上使用 node_modules\.bin\mocha "test\unit\*.js"node_modules\.bin\mocha "**\*.js" 也有效(我的真实案例)。但我正在寻找一种排除 node_modules 目录的方法。 (我也使用 gulpfile.js 但有时我需要直接使用 mocha 启动测试)
              【解决方案12】:

              如果你使用nodejs,在你的package.jsonscripts

              1. 对于 global (-g) 安装:"test": "mocha server-test""test": "mocha server-test/**/*.js" 对于子文档
              2. 对于 project 安装:"test": "node_modules/mocha/bin/mocha server-test""test": "node_modules/mocha/bin/mocha server-test/**/*.js" 对于子文档

              然后以npm test 正常运行您的测试

              【讨论】:

              • 我发现 npm run mocha "./test/*.spec.js!(~)" 忽略了 glob 参数,但 node_modules/.bin/mocha "./test/*.spec.js!(~)" 没有。
              • @ironchicken 将参数传递给“npm run”使用——如npm run mocha -- yourArgs
              【解决方案13】:

              这似乎不是对更改测试目录的任何“简单”支持。
              但是,相对于您的问题,也许您应该看看this issue

              【讨论】:

                【解决方案14】:

                按照@jeff-dickey 的建议,在项目的根目录中创建一个名为test 的文件夹。在该文件夹中,创建一个名为 mocha.opts 的文件。现在我尝试改进 Jeff 的答案,对我有用的不是仅指定一个测试文件夹的名称,而是指定了一种模式,通过添加以下行来查找要在我的项目中运行的所有测试:

                */tests/*.js --recursive in mocha.opts

                如果您想指定要在其中查找测试的确切文件夹,我做了这样的事情:

                shared/tests/*.js --recursive
                server/tests/graph/*.js --recursive
                

                我希望这可以帮助任何需要比其他答案提供的更多的人

                【讨论】:

                  猜你喜欢
                  • 2015-11-18
                  • 2019-03-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-03-16
                  • 2012-01-22
                  • 1970-01-01
                  相关资源
                  最近更新 更多