所以我有这段代码:
describe('main describe', function() {
afterEach(function() {
//this.prop === undefined
});
describe('sub', function() {
it('should do something', function() {
this.prop = 'test';
});
});
});
我不知道this.prop
main
中afterEach
为undefined
的原因是describe('main describe', function() {
afterEach(function() {
//this.prop === 'test'
});
it('should do something', function() {
this.prop = 'test';
});
});
,因为以下代码按预期工作:
'test'
为什么第一个代码不起作用,尽管this.prop应该等于undefined
而不是this
?
describe
关键字是否仅与其直接包含的{{1}}函数相关联?
答案 0 :(得分:20)
是的,每个describe
都会获得一个新的Context
对象。 (我提到的所有类都可以在Mocha的源代码中找到。)你可以得到你想要做的事情:
describe('main describe', function() {
afterEach(function() {
console.log(this.prop);
});
describe('sub', function() {
it('should do something', function() {
this.test.parent.ctx.prop = 'test';
});
});
});
行this.test.parent.ctx.prop
是关键。 this
是与Context
电话相关联的it
。 this.test
是与Test
调用关联的it
对象。 this.test.parent
是与Suite
调用相关联的describe
对象,该调用会立即包含it
调用。 this.test.parent.ctx
是describe
调用出现的有效上下文,恰好与this
调用中的afterEach
相同。< / p>
我实际上建议不要遍历Mocha的内部结构,而是执行以下操作:
describe('main describe', function() {
var prop;
afterEach(function() {
console.log(prop);
});
describe('sub', function() {
it('should do something', function() {
prop = 'test';
});
});
});