如何在集成测试中访问 ember 数据存储实例?

m0m*_*eni 5 javascript integration-testing unit-testing ember.js

这适用于 Ember 2.2.0。我想使用来自我的 API 服务器的实时数据来测试我的组件,ember-data而不是使用来自测试助手、手动 AJAX 请求或类似ember-cli-mirage. 目前我在我的测试中只有这个代码:

import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';

moduleForComponent('checkbox-group', 'Integration | Component | checkbox group', {
  integration: true
});

test('it renders', function(assert) {
  this.render(hbs`{{checkbox-group}}`);
  assert.equal(this.$().text().trim(), '');
});
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的:

test('it renders', function(assert) {
  const store = getStoreFromSomewhere();
  const model = store.find('data').then(() => {
    this.render(hbs`{{checkbox-group data=model}}`);
    // Do testing on component with model from server
  });
});
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何获取商店实例,另外我不知道 ember 如何进行异步测试。

这些文档不太有用:/。有人可以让我知道如何获取商店实例,如果不可能,另一种方法来进行此测试ember-data吗?

Ped*_*Rio 5

我相信,这更像是验收测试而不是集成测试。验收测试设置整个应用程序,以便您可以对其进行测试。

我相信在集成测试中,您应该伪造模型,例如:

test('it renders', function(assert) {
  const modelValue = Ember.Object.create({
     prop1: value1,
     prop2: value2,
  });
  this.set('model', modelValue);
  this.render(hbs`{{checkbox-group data=model}}`);
  // Do testing on component with fake model
  });
});
Run Code Online (Sandbox Code Playgroud)

话虽如此,而且我认为我要说的这仅在 Ember 2.2 之前有效(我相信 Ember 2.3 已被弃用)。您可以执行以下操作:

let store = this.container.lookup('service:store');
Run Code Online (Sandbox Code Playgroud)

但是,如果你这样做......当你使用商店时你会得到一个错误。

“断言失败:您已打开测试模式,这禁用了运行循环的自动运行。您需要在运行中包装具有异步副作用的任何代码”

这意味着您需要在 Ember.run 中包装异步代码

Ember.run(() => {
  let store = this.container.lookup('service:store');
  store.findAll('post').then((posts) => {
     //do stuff
  });
});
Run Code Online (Sandbox Code Playgroud)

我的两分钱是,不要在集成测试中直接使用商店。