Ember JS测试-工厂专家

时间:2018-07-25 12:35:42

标签: testing ember.js factory

我正在使用ember 2.18和ember-data-factory-guy 3.3.0。

我想测试组件内部的操作。在操作中,我使用makeList来创建和返回模型列表。在我的余烬应用程序中,我将商店传递给组件,并在调用操作时进行查询。

这是我的工厂:

import FactoryGuy from 'ember-data-factory-guy';

FactoryGuy.define('contact', {
  sequences: {
    first_name: (num) => `FirstName${num}`,
    last_name:  (num) => `LastName${num}`,
    email:      (num) => `contact${num}@example.com`,
    phone:      (num) => `01234567${num}`,
    linkedin:   (num) => `samplelinkedinurl${num}`,
  },
  default: {
    first_name: FactoryGuy.generate('first_name'),
    last_name:  FactoryGuy.generate('last_name'),
    email:      FactoryGuy.generate('email'),
    phone:      FactoryGuy.generate('phone'),
    linkedin:   FactoryGuy.generate('linkedin'),
    position:   'CEO',
    client_office: FactoryGuy.belongsTo('office')
  },
  traits: {
    withClient: {
      client: FactoryGuy.belongsTo('client')
    },
    withOffice: {
      client_office: FactoryGuy.belongsTo('office')
    }
  }
});

此外,我的行动是以下行动:

_this.store.query('contact', {term: searchTerm}).then(function(contacts) { ... })

我已经创建了一个TestStore类来测试这些动作。这是炭烬数据存储区查询方法的最小复制。查询方法如下:

query(modelName, attributes, trait=null) {
  console.log('ATTRIBUTES PASSED TO TEST STORE QUERY: ', attributes)

  // make a new record of selected model with factory guy
  let _this = this,
       records = Ember.isEmpty(trait) ? makeList(modelName, 4) : makeList(modelName, 4, trait);

  // Push it to test-store
  if (!this.models[modelName]) {
      this.models[modelName] = Ember.A([]);
  }

  records.forEach(function(record) { 
  _this.models[modelName].pushObject(record); })


  // Create promise to return
  let recordPromise = new Ember.RSVP.Promise((resolve) => {
    resolve(records);
  });
  return DS.PromiseArray.create({promise: recordPromise});
}

在渲染测试中,它工作正常。如果我要手动运行操作(例如在单元测试中),则会收到以下错误:

FactoryGuy没有应用程序的

manualSetup不能正常工作,因为商店服务卡在商店的“ willDestroy()”中,并且_pushedInternalModels为null,因此无法将任何模型推入商店。

对此有任何想法/建议吗?

0 个答案:

没有答案