钩子
钩子
这些函数可以用来控制测试用例的执行顺序和执行前后的操作,从而提供更灵活的测试环境和测试设置。
- beforeEach(): 这个函数用于在每个测试用例之前执行一次,可以用来设置测试环境或者进行一些准备工作。
- beforeAll(): 这个函数用于在所有测试用例之前执行一次,通常用于设置全局的测试环境或者进行一些全局的准备工作。
- afterEach(): 这个函数用于在每个测试用例执行之后执行一次,可以用来进行一些清理工作或者收集测试结果。
- 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();
});
});
});
});