Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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 Qunit_initProperties不是一个函数_Javascript_Ember.js_Qunit_Ember Qunit - Fatal编程技术网

Javascript Qunit_initProperties不是一个函数

Javascript Qunit_initProperties不是一个函数,javascript,ember.js,qunit,ember-qunit,Javascript,Ember.js,Qunit,Ember Qunit,我在这里遇到了一些奇怪的行为,我想看看是否有人知道它为什么会发生。我编写了一个简单的Ember-QUnit测试,希望在每个测试之间共享一些数据,以减少混乱 试验 这里有几件事: 我收到一个错误此错误。\ initProperties不是函数 当我删除共享内容时,错误就会消失 如果我在模块和测试之间添加共享内容,则错误仍然存在 我希望能够共享beforeach或全局中定义的变量 我尝试过在每个之前的中执行类似于让a=1的操作,但似乎无法在测试本身中引用它们 我注意到QUnit医生说他们已经

我在这里遇到了一些奇怪的行为,我想看看是否有人知道它为什么会发生。我编写了一个简单的Ember-QUnit测试,希望在每个测试之间共享一些数据,以减少混乱

试验 这里有几件事:

  • 我收到一个错误
    此错误。\ initProperties不是函数
    • 当我删除共享内容时,错误就会消失
    • 如果我在
      模块和
      测试之间添加共享内容,则错误仍然存在
  • 我希望能够共享beforeach或全局中定义的变量
  • 我尝试过在每个之前的
    中执行类似于
    让a=1的操作,但似乎无法在测试本身中引用它们
我注意到QUnit医生说他们已经排除了globals。这会在其中起作用吗

PS:如果有一些东西可以只设置模块一次而不是每次,那就太好了

编辑 这是stacktrace:

Promise rejected before should do things: this._initProperties is not a function Source: TypeError: this._initProperties is not a function at create (http://localhost:7357/assets/vendor.js:46461:14) at Object.beforeEach (http://localhost:7357/assets/tests.js:185:20) at http://localhost:7357/assets/test-support.js:6586:31 at tryCatch (http://localhost:7357/assets/vendor.js:61631:14) at invokeCallback (http://localhost:7357/assets/vendor.js:61646:15) at publish (http://localhost:7357/assets/vendor.js:61614:9) at http://localhost:7357/assets/vendor.js:41408:7 at invoke (http://localhost:7357/assets/vendor.js:11120:16) at Object.flush (http://localhost:7357/assets/vendor.js:11184:11) at Object.flush (http://localhost:7357/assets/vendor.js:10992:17) 承诺被拒绝之前应该做的事情:this.\u initProperties不是一个函数 资料来源: TypeError:这不是一个函数 在创建时(http://localhost:7357/assets/vendor.js:46461:14) 在对象之前(http://localhost:7357/assets/tests.js:185:20) 在http://localhost:7357/assets/test-support.js:6586:31 在tryCatch(http://localhost:7357/assets/vendor.js:61631:14) 在invokeCallback(http://localhost:7357/assets/vendor.js:61646:15) 出版时(http://localhost:7357/assets/vendor.js:61614:9) 在http://localhost:7357/assets/vendor.js:41408:7 在调用时(http://localhost:7357/assets/vendor.js:11120:16) 在Object.flush(http://localhost:7357/assets/vendor.js:11184:11) 在Object.flush(http://localhost:7357/assets/vendor.js:10992:17)
事实上,我认为这可能与全球变暖无关。我还添加了(以前未包括)
let create=Ember.Object.create
只是为了保存一些输入(并用调用
create(Object)
包装了上述对象)。摆脱这个问题并使用长格式似乎可以摆脱这个错误,不过…

问题的最后一部分是实际问题

当你这样做的时候

let create = Ember.Object.create
您可以从
Ember.Object
中提取函数
create
,并将其作为普通函数创建一个新的引用

根据JS绑定规则,当您将函数作为普通函数调用时,其中的
将绑定到全局对象(或在严格模式下
未定义的
)。另一方面,当您将函数作为对象上的方法调用时(即直接在
Ember.object
上调用它)将此
绑定到该对象

这就是为什么
这个
create
中没有定义,因此
this.\u initProperties
不是一个函数

下面是正在发生的事情的演示:

//具有方法的对象
var obj={
getThis:function(){
归还这个;
}
};
//对该方法的摘录引用
var extractedGetThis=obj.getThis;
//这将绑定到对象
console.log(
obj.getThis()==obj//true
);
//这在全球范围内具有约束力
console.log(
extractedGetThis()==window//true

)
他们已经消除了全局变量,这意味着他们不再将变量放在
窗口上了,你应该仍然能够像这样使用共享数据,我以前已经做过很多次了。你也可以在你的测试目录中创建另一个文件,并在其中存储可以在多个测试中共享的数据。你能展示一下函数是如何de>\u initProperties
被使用,它的定义在哪里?这是个问题,不是吗?它不是我的,我很难找到它。我猜它埋在Ember或QUnit源代码的深处。你可以显示错误stacktrace吗?你也应该删除所有内容,直到错误没有发生,然后慢慢地按lin添加行对罪犯做了很好的解释。非常感谢你的解释help@shane没问题,很高兴能帮上忙:)不管它值多少钱,这应该可以完成我想要的:
let create=Ember.Object.create.bind(Ember.Object)
let create = Ember.Object.create