Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:无法设置属性';变量';在beforeach中设置this.variable时,为未定义_Javascript_Unit Testing_Mocha.js - Fatal编程技术网

Javascript TypeError:无法设置属性';变量';在beforeach中设置this.variable时,为未定义

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

我是Javascript新手。我有下面的代码,完全按照

运行测试时,它会发出抱怨

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
    });
  });