在测试中重置embture-data FixtureAdapter存储/模型

时间:2013-04-22 14:40:31

标签: ember.js ember-data

我们的应用程序使用带有FixtureAdapter的ember-data。我们正在使用Jasmine和js-test-driver测试模型代码(各种JS计算)。每个块都在beforeEach块中创建自己的一组记录。

这适用于2013-03-05(rev 7575f5a)本地构建的ember-1.0.0-rc.1和ember-data。我目前正在尝试升级到1.0.0-rc.3和最新的余烬数据,但我遇到了一个具有独特ID的障碍。运行所有测试时出现以下错误:

Error: assertion failed: The id 1001 has already been used with another record of type .Foo. in http://localhost:56390/js/lib/ember-1.0.0-rc.3.js (line 52)

它看起来像是一个较新版本的独特ID上的ember-data断言。不幸的是,我们的测试需要硬编码的id用于在每个测试的beforeEach块中重新创建的记录。所以每个测试都创建一个ID为1001的Foo。

是否有一种简单的方法可以使用FixtureAdapter重置所有数据(因此忘记Foo 1001)?我尝试用以下方法重置灯具:

App.Foo.FIXTURES = []

然而,ember-data似乎仍然在某处跟踪旧记录。我也尝试了App.reset(),但它似乎没有重置商店。

我们也做

App.Store = DS.Store.extend({
    revision: 12,
    adapter: 'DS.FixtureAdapter'
});

在beforeEach块中,假设通过创建新商店清除所有数据,但这也不起作用。

2 个答案:

答案 0 :(得分:0)

我最初遇到了完全相同的问题,试图在个别测试之前生成记录。考虑fixtures in the Rails sense是有帮助的,它们代表一组记录,这些记录将在所有测试运行之前构建一次。

这与在每次测试之前构建单个记录的工厂风格相反,这是您似乎遵循的模式。

这比解决方案更重要,但我建议将所有灯具放入一个或多个文件中,然后在所有测试之前加载它们。然后,您将从单独的测试中引用相同的记录而不重构它们。

夹具方法的最大警告是每次测试后都没有提供任何“回滚”。因此,如果您依赖于测试中的原始值,则需要警惕变异记录。

答案 1 :(得分:0)

确保在每次测试运行之间运行Ember.reset()(通过将它放在茉莉花之前的所有块中)