分离单元测试和集成测试

Tho*_*ggi 18 testing mocha.js node.js jestjs

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

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

就像是:

  • __unit__
  • __integration__

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

思考?

Mat*_*att 40

Mocha支持目录,文件通配和测试名称grepping,可用于创建测试的"组".

目录

test/unit/whatever_spec.js
test/int/whatever_spec.js
Run Code Online (Sandbox Code Playgroud)

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

mocha test/unit
mocha test/int
mocha test/unit test/int
Run Code Online (Sandbox Code Playgroud)

文件前缀

test/unit_whatever_spec.js
test/int_whatever_spec.js
Run Code Online (Sandbox Code Playgroud)

然后用特定文件运行mocha

mocha test/unit_*_spec.js
mocha test/int_*_spec.js
mocha
Run Code Online (Sandbox Code Playgroud)

测试名称

在mocha中创建描述测试类型和类/主题的外部块.

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

describe('Integration::Whatever', function(){})
Run Code Online (Sandbox Code Playgroud)

然后使用mochas"grep"参数运行命名块 -g

mocha -g ^Unit::
mocha -g ^Integration::
mocha
Run Code Online (Sandbox Code Playgroud)

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

的package.json

将每个测试命令存储在package.json scripts部分中,这样可以很容易地运行类似yarn test:int或者npm run test:int.

{
  scripts: {
    "test": "mocha test/unit test/int",
    "test:unit": "mocha test/unit",
    "test:int": "mocha test/int"
  }
}
Run Code Online (Sandbox Code Playgroud)