}); $env->describe('inner', function () use($env, &$calls) { $env->beforeEach(function () use(&$calls) { $calls[] = 'inner'; }); $env->it('are called in order from outer to inner'); }); }); $env->execute(); expect($calls)->toEqual(['outer', 'inner']); }); it('is supported on top level (Env)', function () { $wasCalled = false; $env = new Env(); $env->beforeEach(function () use(&$wasCalled) { $wasCalled = true; }); $env->describe('a context', function () use($env) { $env->it('a spec'); }); $env->execute(); expect($wasCalled)->toBe(true); }); }); describe('afterEach', function () { it('is called once for each spec', function () { $calls = 0; $env = new Env(); $env->describe('a context', function () use($env, &$calls) { $env->afterEach(function () use(&$calls) { $calls++;