如何在ember-qunit中使用qunit-bdd?

时间:2014-04-16 15:33:09

标签: ember.js qunit-bdd ember-qunit

最初由Andreas Haller发布在邮件列表中,在此处重新发布,以便“qunit-bdd”标签可供其他人使用。

  

ember-qunit添加了一个方便的moduleFor帮助程序,可以将其用作QUnit的module函数的替代方法。现在ember-qunit抽象的东西,所以我永远不必使用模块功能,我不知道我是否可以。我的问题有两个:

     
      
  1. describe defacto的行为是否与module相同?
  2.   
  3. 我如何使用ember-qunit的moduleFor / moduleForComponent
  4.         

    如果没有针对#2的解决方案,那么describe(moduleFor('controller:posts'), function() { … })之类的东西会很好。

1 个答案:

答案 0 :(得分:2)

qunit-bdd中的

describe与QUnit中的module大致相同。不同之处在于它们可以嵌套在qunit-bdd中,并且每个嵌套级别都对应于module调用,并且名称连接在一起。例如,这将导致三次调用module

describe('Foo', function() {
  it('is a function', function() {
    expect(typeof Foo).to.equal('function');
  });

  describe('#foo', function() {
    it('says FOO', function() {
      expect(new Foo().foo()).to.equal('FOO');
    });
  });

  describe('#bar', function() {
    it('says BAR', function() {
      expect(new Foo().bar()).to.equal('BAR');
    });
  });
});

因为没有办法控制调用module函数,所以还没有办法使用带有ember-qunit的qunit-bdd。我们正在讨论如何改变这种状况。您的建议可行,但需要为ember-qunit明确修改qunit-bdd。我更喜欢在ember-qunit中使用共享代码,然后为qunit-bdd创建一个瘦包装器。也许类似于你的东西,但保持API与qunit-bdd相同:

describe('PostsController', testFor('controller:posts', function() {
  it('has a length', function() {
    expect(this.subject.length).to.be.defined();
  });
}));

任何建议都将不胜感激。