9

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

这适用于 ember-1.0.0-rc.1 和在 2013-03-05(rev 7575f5a)本地构建的 ember-data。我目前正在尝试升级到 1.0.0-rc.3 和最新的 ember-data,但是遇到了具有唯一 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)

它看起来像是一个更新版本的 ember-data 断言唯一 ID。不幸的是,我们的测试需要硬编码的 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 块中,假设这将通过创建新存储来清除所有数据,但这也不起作用。

4

2 回答 2

0

我最初遇到了完全相同的问题,试图在单独测试之前生成记录。考虑Rails 意义上的固定装置是有帮助的,它们代表一组记录,在所有测试运行之前将被构造一次。

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

与其说是解决方案,不如说是一种解决方法,但我建议将所有固定装置放入一个或多个文件中,然后在所有测试之前加载它们。然后,您将从单独的测试中引用相同的记录,而无需重新构建它们。

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

于 2013-10-04T15:09:05.360 回答
0

确保在每次测试运行之间运行 Ember.reset() (通过将它放在你的 jasmine beforeAll 块中)

于 2014-05-02T04:51:36.177 回答