我们的应用程序在FixtureAdapter中使用ember-data。我们正在使用Jasmine和js-test-driver测试模型代码(各种JS计算)。每个it块在beforeEach块中创建自己的一组记录。
这与2013-03-05 (版本7575f5a)本地构建的ember-1.0.0-rc.1和ember-data一起工作得很好。我目前正在尝试升级到1.0.0-rc.3和最新的ember data,但遇到了唯一ids的障碍。在运行所有测试时,我得到了以下错误:
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)它看起来像是唯一ids上的ember-data断言的更新版本。不幸的是,我们的测试需要硬编码的id来记录,这些记录是在每个test.So的beforeEach块中重新创建的。每个测试都创建一个id为1001的Foo。
有没有一种简单的方法可以让带有FixtureAdapter的存储重置所有数据(从而忘记foo1001)?我尝试使用以下命令重置灯具:
App.Foo.FIXTURES = []然而,ember-data似乎仍然会跟踪某个地方的旧记录。我也尝试过App.reset(),但它似乎没有重置商店。
我们也这样做
App.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});在beforeEach块中,假设这将通过创建一个新存储来清除所有数据,但这也不起作用。
发布于 2013-10-04 23:09:05
我最初遇到了完全相同的问题,试图在单独测试之前生成记录。考虑fixtures in the Rails sense是很有帮助的,因为它们表示一组记录,这些记录将在所有测试运行之前构建一次。
这与在每次测试之前建立单独记录的工厂风格相反,这是您似乎正在遵循的模式。
这更像是一种工作而不是解决方案,但我建议您将所有的fixture放入一个或多个文件中,然后在所有测试之前加载这些文件。然后,您将从单独的测试中引用相同的记录,而不重新构建它们。
对fixture方法最大的警告是,在每次测试之后都没有提供任何“回滚”。因此,如果您在测试中依赖原始值,则需要小心更改记录。
发布于 2014-05-02 12:51:36
确保在每次测试运行之间运行Ember.reset() (通过将其放入jasmine beforeAll块)
https://stackoverflow.com/questions/16149896
复制相似问题