我是否应该能够覆盖实例中类级别指定的绑定?

时间:2012-03-02 04:09:28

标签: ember.js

如果你想直接跳转jsFiddle代码,它就在这里:http://jsfiddle.net/bbkxK/2/

理想情况下,我希望两个对象实例都为theMessage输出“其他东西”。

以下是上下文: 我们有一个庞大的Ember应用程序,我们希望通过在我们的类定义中为全局单例指定适当的默认绑定来使用约定优于配置的方法(如果你想要切断并认为这很可怕并且有更好的方法,我很满意。我不喜欢我们当前的架构,但它遵循Ember开发人员通过示例应用程序提出的模式。)

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

为了隔离测试,我们开始尝试覆盖在我们在单元测试中创建的测试主题实例中在类级别指定的默认绑定。通常,我们会尝试使用对mock对象的静态引用将绑定替换为singleton。和我一起到目前为止?

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

但是......它比正常的Ember做事方式更加冗长,而且感觉不对劲。我想我们可以创建一个mixin或猴子补丁Ember以使它更好,但它似乎是一个接触开发者和放大器的好时机。我们采取这一步骤之前的社区。

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

1 个答案:

答案 0 :(得分:5)

首先,我只想说明我们真的需要写更多关于如何用Ember测试的内容。

我认为,对类定义中的绝对路径(依赖于单例)的绑定是一个很大的禁忌是一个很好的规则。可以使用相对绑定路径。

我建议你避免使用单身人士。这使得测试变得更加困难。通常的做法是始终将控制器定义为类。然后,您可以在应用程序和测试中实例化它们。比试图在测试中处理单例使用更容易,更容易出错。