Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/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
Ember.js 由于“ReferenceError:Faye未定义”,使用QUnit和Karma测试Emberjs应用程序失败`_Ember.js_Scope_Qunit_Faye_Karma Qunit - Fatal编程技术网

Ember.js 由于“ReferenceError:Faye未定义”,使用QUnit和Karma测试Emberjs应用程序失败`

Ember.js 由于“ReferenceError:Faye未定义”,使用QUnit和Karma测试Emberjs应用程序失败`,ember.js,scope,qunit,faye,karma-qunit,Ember.js,Scope,Qunit,Faye,Karma Qunit,我正在用Qunit和karma runner测试EmberJs应用程序,它运行良好。 然后我不得不将faye集成到应用程序中,该应用程序运行良好,但在运行我的测试套件时,它显示了以下错误和崩溃: ReferenceError:未定义Faye 错误被抛出,我正在用emberjs定义客户机 client = new Faye.Client(uri); 虽然这在开发阶段有效,但在测试阶段无效。 在这里,uri=”http://localhost:9292/faye“ faye.js包含在vendor

我正在用Qunit和karma runner测试EmberJs应用程序,它运行良好。 然后我不得不将faye集成到应用程序中,该应用程序运行良好,但在运行我的测试套件时,它显示了以下错误和崩溃:

ReferenceError:未定义Faye

错误被抛出,我正在用emberjs定义客户机

client = new Faye.Client(uri);
虽然这在开发阶段有效,但在测试阶段无效。 在这里,
uri=”http://localhost:9292/faye“


faye.js包含在vendor.js(一个js文件,其中包含所有js插件,包括ember.js和ember-data.js本身)中,该文件在app.js之前加载(上面一行存在的文件)

这种奇怪行为的原因与faye中的以下几行有关:

if(模块类型!=“未定义”)
module.exports=Faye;
else if(窗口的类型!==“未定义”)
window.Faye=Faye

来源:
因此,如果模块未定义(即已定义),则将设置模块.exports对象,如果未定义,则将设置窗口.Faye
如果您使用调试器并在该行上设置断点,您会发现模块实际上是定义的,为什么?这是一个QUnit全局辅助方法
费伊为什么这样做?我猜是因为它可以在NodeJS环境中运行(您可以阅读有关module.exports的更多信息)。
在我看来,您有两种可能的解决方案:

  • 在昆特之前要求费伊
  • 修补Faye以忽略窗口中存在的模块
我在使用QUnit时遇到了相同的行为。
制作茶匙需要费伊先于昆特,这似乎是个坏主意,而且可能会陷入困境。
最后我给Faye打了补丁,让它跳过模块检查,也不是很漂亮,但我相信这是合理的