如何使用emberjs中的promises为控制器动作编写单元测试

时间:2017-04-25 21:54:36

标签: ember.js

我有一个ember js控制器,其中包含一个采用模型的动作。 如何编写单元测试来测试返回承诺的操作?     deleteUser(模型)     {           model.destroyRecord()。then(()=> this.transitionToRoute(' posts'));     }

1 个答案:

答案 0 :(得分:0)

wait()函数听起来像你想要的。不确定它是否适用于承诺,因为它没有在文档的这一部分中提到承诺。无论如何,可能想要试一试。

来自Ember docs(https://guides.emberjs.com/v2.12.0/testing/testing-components/):

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

moduleForComponent('delayed-typeahead', 'Integration | Component | delayed typeahead', {
  integration: true
});

const stubResults = [
  { name: 'result 1' },
  { name: 'result 2' }
];

test('should render results after typing a term', function(assert) {
  assert.expect(2);

  this.set('results', []);
  this.set('fetchResults', (value) => {
    assert.equal(value, 'test', 'fetch closure action called with search value');
    this.set('results', stubResults);
  });

  this.render(hbs`{{delayed-typeahead fetchResults=fetchResults results=results}}`);
  this.$('input').val('test');
  this.$('input').trigger('keyup');

  return wait().then(() => {
    assert.equal(this.$('.result').length, 2, 'two results rendered');
  });

});

编辑:上面的例子来自集成测试...不确定这是你的想法。请注意,您还可以查看andThen助手。也许给我们一些关于你的想法的更多信息?