Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在集成测试中访问ember数据存储实例?_Javascript_Unit Testing_Ember.js_Integration Testing - Fatal编程技术网

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

Javascript 如何在集成测试中访问ember数据存储实例?,javascript,unit-testing,ember.js,integration-testing,Javascript,Unit Testing,Ember.js,Integration Testing,这是针对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-gro

这是针对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(), '');
});
我想做的是这样的:

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
  });
});
问题是我不知道如何获取store实例,而且我也不知道ember如何进行异步测试


这些文档没有什么帮助:/。有人能告诉我如何获取store实例吗?如果不可能,可以用另一种方法使用
ember数据进行此测试吗?

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

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

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
  });
});
那么说,我想我要说的是,这只在余烬2.2之前有效(我认为余烬2.3是不推荐的)。您可以执行以下操作:

let store = this.container.lookup('service:store');
但是,如果你这样做。。。当你使用商店时,你会得到一个错误

断言失败:您已打开测试模式,该模式禁用了 运行循环的自动运行。您需要使用异步 “跑步中的副作用”

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

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

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

moduleForComponent
规范中,我相信这样做的方法是:

var-store=Ember.getOwner(this.lookup)(“服务:商店”)

与之相反:

var-store=this.container.lookup('service:store')

而且,您可以在每次
之前在
中这样模拟它:

this.promise = new Ember.RSVP.Promise((resolve) => {
  var response  = anEmberObject; 
  resolve(response);
});

this.storeMock = Ember.Service.extend({
  save: ()=>{
    return this.promise;
  },
  reload: (query)=>{
    return this.promise;
  }
});


Ember.getOwner(this).register('service:store', this.storeMock);
Ember.getOwner(this).inject('component', 'store', 'service:store');

检查了我的一个旧测试,我得到了“var store=this.store();”@kristjanreinhold不起作用:(还从'ember qunit'导入了“import{test,moduleForModel};”>链接到完整测试=>我在这里回答了类似的问题:如果
getOwner
在2.3之前不可用,并且使用polyfill仍然无法访问集成测试中的存储,那么很高兴知道这适用于哪个版本的Ember。
container.lookup
在1.13中甚至不起作用。。。