单元测试和集成测试的分离

Separation of unit tests and integration tests

我有兴趣创建完整的模拟单元测试,以及检查某些异步操作是否已正确返回的集成测试。我想要一个用于 unit 测试的命令和一个用于 integration 测试的命令,这样我就可以在我的 CI 工具中分别 运行 它们。最好的方法是什么? mocha 和 jest 等工具似乎只专注于一种做事方式。

我看到的唯一选择是使用 mocha 并在一个目录中有两个文件夹。

类似于:

然后我需要一些方法告诉 mocha 运行 src 目录中的所有 __unit__ 测试,另一个告诉它 运行 所有__integration__ 测试。

想法?

mocha 不支持标签或类别。你理解正确。 你必须创建两个文件夹,unit 和 integration,然后像这样调用 mocha

摩卡单位 摩卡整合

Mocha 支持目录、文件通配和测试名称grepping,可用于创建测试“组”。

目录

test/unit/whatever_spec.js
test/int/whatever_spec.js

然后 运行 测试目录中的所有 js 文件

mocha test/unit
mocha test/int
mocha test/unit test/int

文件前缀

test/unit_whatever_spec.js
test/int_whatever_spec.js

然后 运行 mocha 针对特定文件

mocha test/unit_*_spec.js
mocha test/int_*_spec.js
mocha

测试名称

在 mocha 中创建描述测试类型和 class/subject 的外部块。

describe('Unit::Whatever', function(){})

describe('Integration::Whatever', function(){})

然后 运行 带有 mochas“grep”参数的命名块 --grep/-g

mocha -g ^Unit::
mocha -g ^Integration::
mocha

在使用测试名称时保持文件或目录分隔仍然很有用,这样您可以轻松区分失败测试的源文件。

package.json

将每个测试命令存储在 package.json scripts 部分,这样就可以很容易地 运行 使用 yarn test:intnpm run test:int.

{
  scripts: {
    "test": "mocha test/unit test/int",
    "test:unit": "mocha test/unit",
    "test:int": "mocha test/int"
  }
}