首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在测试中重置ember-data FixtureAdapter存储/模型

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

Stack Overflow用户
提问于 2013-04-22 22:40:31
回答 2查看 665关注 0票数 9

我们的应用程序在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的障碍。在运行所有测试时,我得到了以下错误:

代码语言:javascript
复制
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)?我尝试使用以下命令重置灯具:

代码语言:javascript
复制
App.Foo.FIXTURES = []

然而,ember-data似乎仍然会跟踪某个地方的旧记录。我也尝试过App.reset(),但它似乎没有重置商店。

我们也这样做

代码语言:javascript
复制
App.Store = DS.Store.extend({
    revision: 12,
    adapter: 'DS.FixtureAdapter'
});

在beforeEach块中,假设这将通过创建一个新存储来清除所有数据,但这也不起作用。

EN

回答 2

Stack Overflow用户

发布于 2013-10-04 23:09:05

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

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

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

对fixture方法最大的警告是,在每次测试之后都没有提供任何“回滚”。因此,如果您在测试中依赖原始值,则需要小心更改记录。

票数 0
EN

Stack Overflow用户

发布于 2014-05-02 12:51:36

确保在每次测试运行之间运行Ember.reset() (通过将其放入jasmine beforeAll块)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16149896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档