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 我应该能够在实例中重写在类级别指定的绑定吗?_Ember.js - Fatal编程技术网

Ember.js 我应该能够在实例中重写在类级别指定的绑定吗?

Ember.js 我应该能够在实例中重写在类级别指定的绑定吗?,ember.js,Ember.js,如果您想直接跳转JSFIDLE代码,可以在这里: 理想情况下,我希望两个对象实例都为消息输出“其他内容” 以下是上下文: 我们有一个庞大的Ember应用程序,我们希望通过在类定义中为全局单例指定适当的默认绑定来使用约定优于配置的方法(如果你想偏离正轨,认为这很可怕,还有更好的方法,我洗耳恭听。我不喜欢我们当前的架构,但它遵循了Ember devs通过示例应用程序设定的模式) 因此,我们指定“正常工作”的默认绑定在正在运行的应用程序中。到目前为止一切都很好。问题是当我们开始单元测试时。一旦我们进行

如果您想直接跳转JSFIDLE代码,可以在这里:

理想情况下,我希望两个对象实例都为消息输出“其他内容”

以下是上下文: 我们有一个庞大的Ember应用程序,我们希望通过在类定义中为全局单例指定适当的默认绑定来使用约定优于配置的方法(如果你想偏离正轨,认为这很可怕,还有更好的方法,我洗耳恭听。我不喜欢我们当前的架构,但它遵循了Ember devs通过示例应用程序设定的模式)

因此,我们指定“正常工作”的默认绑定在正在运行的应用程序中。到目前为止一切都很好。问题是当我们开始单元测试时。一旦我们进行了大约500个单元测试,我们就开始出现测试隔离问题。一些测试将更新单例控制器的状态,然后其他测试将开始失败。在过去的几周里,它已经变成了一团混乱,时间也在减少

为了隔离测试,我们开始尝试覆盖在类级别指定的默认绑定,在我们在单元测试中创建的测试主题实例中。通常,我们会尝试用对模拟对象的静态引用替换对singleton的绑定。到目前为止,我是怎么做的

在尝试了许许多多不同的方法之后,到目前为止,我提出的最佳策略是
MyApp.classWithDeferredDefaultBindings
模式,您可以在jsFiddle示例()中看到

但是…这比正常的余烬方式要复杂得多,而且感觉不太对劲。我想我们可以创建一个mixin或monkey patch Ember来让它更好,但在我们采取这一步之前,这似乎是一个接触开发人员和社区的好时机


所以我的多人问题是:我们的方法在单元测试的上下文中覆盖默认的单例绑定是否合理?我们是否应该向Ember发出功能请求以更无缝地支持这一点?你能说这实际上是框架中的一个bug吗?

首先,我只想说明我们确实需要这样做写更多关于如何使用Ember进行测试的内容

我认为这是一个很好的规则,可以说绑定到类定义内部的绝对路径(依赖于单例)是一个很大的禁忌


我建议您避免使用单例。这会使测试变得更加困难。通常的做法是,您应该始终将控制器定义为类。然后您可以在应用程序和测试中实例化它们。与在测试中处理单例使用情况相比,这要容易得多,也不容易出错。

很难捕获我的pr一个简单的JSFIDLE中的问题。我们试图在测试中不使用单例,但覆盖默认绑定时遇到了问题。我想这是一派胡言,你说的是不要设置默认绑定。我基本上同意,但我们有500多个类(代码库大约有100000行)在初始化过程中对所有事物进行布线变得越来越难处理。我们真正想要的是一种依赖注入系统,其中单个单元被定位,如果在单元测试中没有被重写,则自动绑定。这就是我们试图用这种绑定模式来实现的。我还应该加上嵌套视图,我不希望PAR。ent视图需要知道其子视图中控制器和其他类似单例实体的所有依赖项,并且在实例化视图时必须设置所有这些依赖项(通常是高度动态的).所以我们经常使用controllerBinding:“…”在我们的视图中,这是我们在编写稳定的、独立的测试时遇到的主要问题。但当我试图解释所有这些时,我越来越确定我们根本不应该在这里使用绑定。这肯定是一个不必要的性能问题。我想回到绘图板上。最初的问题是她e基本上是无效的。我们有架构缺陷,应该停止在类级别指定到全局命名空间的绑定。