具有计算属性的简单Ember组件测试

时间:2015-06-30 18:34:06

标签: unit-testing ember.js ember-qunit ember-testing

我知道这应该很简单,我只是没有做正确的事情,并且没有找到模仿的例子,我猜我是否完全理解Ember.run() < / p>

这是我的组件代码:

import Ember from 'ember';
export default Ember.Component.extend({
  isGreen: function() {
    if (!status) { return ''; }
    return status.toUpperCase() === 'G';
  }.property('status')
});

我的组件模板:

<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-green {{if isGreen 'active'}}">
    <input checked="checked" name="status" value="G" type="radio"/> Green
  </label>
  <label class="btn btn-yellow {{if isYellow 'active'}}">
      <input name="status" value="Y" type="radio"/> Yellow
  </label>
  <label class="btn btn-red {{if isRed 'active'}}">
      <input name="status" value="R" type="radio"/> Red
  </label>
</div>

在我的测试中:

test('status sets active class on the correct button', function(assert) {
  expect(3);
  var component = this.subject();

  //Green status
  Ember.run(function() {
    component.set('status', 'G');
  })
  equal(this.$().find('.btn-green.active').length, 1, 'When status is green, the green button has the active class');

我有三个这样的测试,一个针对三种不同的状态。如果我只有一个测试,我不需要在component.set()中包装Ember.run()以便测试通过。但如果我有三个测试,我会收到这个错误:

  

您已启用测试模式,该模式禁用了运行循环   自动运行。您需要使用异步副作用包装任何代码   在一次运行中

但是,如果我将每个component.set()调用放在一个运行循环中,那么我的测试会因equal断言期望1并且变为0而失败。我确定这是到期的我缺乏理解,但set()没有运行,或者组件在断言中重新呈现,因此不知道status属性已经设置。我一直在阅读文档和谷歌搜索一个小时,但尚未找到解决方案(更有利的是,解释)。

1 个答案:

答案 0 :(得分:1)

@torazaburo: Facepalm 由于某种原因,测试通过了它只是一个,我认为由于模板中的某些内容可能是误报。但当然你是对的。

我本应该使用>>> a = "(b ^ c) || d && e" >>> print(*filter(lambda x: not x.isalpha() and x not in '()', a), sep='') ^ || && 。新手错误!