Skip to main content

钩子

钩子

这些函数可以用来控制测试用例的执行顺序和执行前后的操作,从而提供更灵活的测试环境和测试设置。

  1. beforeEach(): 这个函数用于在每个测试用例之前执行一次,可以用来设置测试环境或者进行一些准备工作。
  2. beforeAll(): 这个函数用于在所有测试用例之前执行一次,通常用于设置全局的测试环境或者进行一些全局的准备工作。
  3. afterEach(): 这个函数用于在每个测试用例执行之后执行一次,可以用来进行一些清理工作或者收集测试结果。
  4. afterAll(): 这个函数用于在所有测试用例执行之后执行一次,通常用于进行一些全局的清理工作或者收集最终的测试结果。

通过其默认的 “BDD” 风格的界面,Mocha 提供了 before()、after()、beforeEach() 和 afterEach() 钩子。 这些应该用于设置前提条件并在测试后进行清理。

describe('hooks', function () {
before(function () {
// runs once before the first test in this block
});

after(function () {
// runs once after the last test in this block
});

beforeEach(function () {
// runs before each test in this block
});

afterEach(function () {
// runs after each test in this block
});

// test cases
});

测试可以出现在钩子之前、之后或散布在钩子之中。 钩子将按照它们定义的顺序运行(视情况而定); 所有 before() 钩子运行(一次),然后运行任何 beforeEach() 钩子、测试、任何 afterEach() 钩子,最后运行 after() 钩子(一次)。

描述钩子

任何钩子都可以通过可选描述来调用,从而更容易查明测试中的错误。 如果为钩子指定了命名函数,则在未提供描述的情况下将使用该名称。

beforeEach(function () {
// beforeEach hook
});

beforeEach(function namedFun() {
// beforeEach:namedFun
});

beforeEach('some description', function () {
// beforeEach:some description
});

异步钩子

所有钩子(before()、after()、beforeEach()、afterEach())也可以是同步或异步的,其行为与常规测试用例非常相似。 例如,你可能希望在每次测试之前使用虚拟内容填充数据库:

describe('Connection', function () {
var db = new Connection(),
tobi = new User('tobi'),
loki = new User('loki'),
jane = new User('jane');

beforeEach(function (done) {
db.clear(function (err) {
if (err) return done(err);
db.save([tobi, loki, jane], done);
});
});

describe('#find()', function () {
it('respond with matching records', function (done) {
db.find({type: 'User'}, function (err, res) {
if (err) return done(err);
res.should.have.length(3);
done();
});
});
});
});