Mocha的“接口”系统使开发人员可以选择自己的DSL样式。Mocha具有BDDTDDExportsQUnitRequire样式的接口。

BDD

BDD接口提供describe()context()it()specify()before()after()beforeEach(),和afterEach()
context()只是的别名describe(),其行为方式相同;它只是提供一种使测试更易于阅读和组织的方法。同样,specify()是的别名it()

所有先前的示例都是使用BDD接口编写的。

  1. describe('Array', function() {
  2. before(function() {
  3. // ...
  4. });
  5. describe('#indexOf()', function() {
  6. context('when not present', function() {
  7. it('should not throw an error', function() {
  8. (function() {
  9. [1, 2, 3].indexOf(4);
  10. }.should.not.throw());
  11. });
  12. it('should return -1', function() {
  13. [1, 2, 3].indexOf(4).should.equal(-1);
  14. });
  15. });
  16. context('when present', function() {
  17. it('should return the index where the element first appears in the array', function() {
  18. [1, 2, 3].indexOf(3).should.equal(2);
  19. });
  20. });
  21. });
  22. });

TDD

TDD接口提供suite()test()suiteSetup()suiteTeardown()setup(),和teardown()

$ mocha —ui tdd xxx.js

  1. suite('Array', function() {
  2. setup(function() {
  3. // ...
  4. });
  5. suite('#indexOf()', function() {
  6. test('should return -1 when not present', function() {
  7. assert.equal(-1, [1, 2, 3].indexOf(4));
  8. });
  9. });
  10. });

require

require界面允许您describe直接使用require和单词,并根据需要调用它们。如果要避免测试中使用全局变量,此接口也很有用。
注意require接口不能通过node可执行文件运行,而必须通过来运行mocha

  1. var testCase = require('mocha').describe;
  2. var pre = require('mocha').before;
  3. var assertions = require('mocha').it;
  4. var assert = require('chai').assert;
  5. testCase('Array', function() {
  6. pre(function() {
  7. // ...
  8. });
  9. testCase('#indexOf()', function() {
  10. assertions('should return -1 when not present', function() {
  11. assert.equal([1, 2, 3].indexOf(4), -1);
  12. });
  13. });
  14. });