Ember.js:如何集成测试与ember-data模型交互的组件

时间:2015-10-01 19:36:37

标签: ember.js ember-data ember-cli

我正在构建一个相对直接的comment-list组件。我想传递可评论的模型(比如Post)并让组件负责创建,编辑和删除注释。现在我传递了各种各样的动作,而且它非常脆弱。

如何在组件集成测试中创建Ember Data模型的真实实例?

我的直接想法是导入模型,然后导入.create({}),但错误导致use this.store.createRecord() instead

/* jshint expr:true */
import { assert } from 'chai';
import { describeComponent, it } from 'ember-mocha';
import hbs from 'htmlbars-inline-precompile';
import Post from 'ownersup-client/post/model';

describeComponent( 'comment-list', 'Integration: CommentListComponent', {
    integration: true
  },
  function() {
    it('renders all of the comments', function() {
      const model = Post.create({ title: 'title' });
      model.get('comments').createRecord({ body: 'One Comment' })

      this.render(hbs`{{comment-list model=model}}`);

      assert.lengthOf(this.$('.comment-list-item'), 1);
    });
  }
);

有人有任何想法吗?

3 个答案:

答案 0 :(得分:7)

在所有Ember测试助手中,商店仅可从moduleForModel获得。

以下是此测试助手的工作方式(source):

  var container = this.container;
  var store = container.lookup('service:store') || container.lookup('store:main');

你可以在测试中做同样的事情。您也可以将它放入帮助程序中,这样就不必复制粘贴了很多东西。

请注意,它仅适用于集成测试。您可以使用与Ember CLI样板捆绑在一起的startApp测试助手启动应用程序,将任何测试转换为集成测试。

答案 1 :(得分:5)

新的ember mocha版本0.8.4包含一种新的公共方式来注入商店等服务。很快就会有一个指南部分(见https://github.com/emberjs/guides/blob/master/source/testing/testing-components.md

基本上,在您的beforeEach中,您需要添加以下行:this.inject.service('store');,使商店在您的测试中可以this.get('store')访问。

以下是新更改的提取请求的链接:https://github.com/switchfly/ember-test-helpers/pull/105

答案 2 :(得分:2)

针对在集成测试中与注入相关的类似问题而苦恼的人们的一般答案。

一切取决于项目中使用的版本和解决方案。

使用module进行集成测试时 (import { module } from 'ember-qunit';

您可以在测试中使用this.owner.lookup('service:store')

有关更多信息,Dockyard上有一篇很棒的文章 https://dockyard.com/blog/2018/01/11/modern-ember-testing