Javascript TypeError:无法设置属性';变量';在beforeach中设置this.variable时,为未定义
我是Javascript新手。我有下面的代码,完全按照 运行测试时,它会发出抱怨Javascript TypeError:无法设置属性';变量';在beforeach中设置this.variable时,为未定义,javascript,unit-testing,mocha.js,Javascript,Unit Testing,Mocha.js,我是Javascript新手。我有下面的代码,完全按照 运行测试时,它会发出抱怨 1) tests "before each" hook for "works": TypeError: Cannot set property 'dom' of undefined 我遗漏了什么吗?最简单的方法是删除this的用法,并在descripe()回调的范围内声明一个变量: describe('tests', () => { let dom; before
1) tests
"before each" hook for "works":
TypeError: Cannot set property 'dom' of undefined
我遗漏了什么吗?最简单的方法是删除
this
的用法,并在descripe()
回调的范围内声明一个变量:
describe('tests', () => {
let dom;
beforeEach(async () =>
Promise.resolve('foo').then(result => {
dom = result;
})
);
it('works', () => {
console.log(dom); // => foo
});
});
您可以在promise中使用回调函数,然后在test中使用回调函数
在使用arrow函数之前,每个新函数都定义了自己的此值
根据调用函数的方式:
- 构造函数中的新对象
- 在严格模式函数调用中未定义
- 如果函数被称为“对象方法”,则为基本对象
因此,代码的问题在于,在测试的回调箭头函数的作用域中,这个
是指描述
块的父作用域
箭头函数没有自己的此
。这个值是
使用封闭的词汇范围;箭头功能遵循正常设置
变量查找规则。所以,在寻找这个不是
在当前作用域中,箭头函数最终会找到
从它的封闭范围
作为一个选项,您可以在descripe
块的父范围中定义变量,并在beforeal
和it
回调中使用它。为什么不让输出;每次之前((完成)=>承诺…然后((结果)=>输出=结果;)
然后检查输出是否有效
describe('tests', () => {
let dom;
beforeEach(async () =>
Promise.resolve('foo').then(result => {
dom = result;
})
);
it('works', () => {
console.log(dom); // => foo
});
});