Как использовать qunit-bdd с ember-qunit?

Первоначально опубликовано в списке рассылки Андреасом Халлером, перепечатано здесь, чтобы тег "qunit-bdd" был доступен для использования другими.

ember-qunit добавляет удобный помощник moduleFor, который можно использовать в качестве альтернативы функции module QUnit. Теперь ember-qunit абстрагирует вещи, так что мне никогда не придется использовать функцию модуля, и я не знаю, смогу ли я. Мой вопрос двоякий:

  1. Действительно ли describe действует так же, как module?
  2. Как я могу использовать moduleFor / moduleForComponent ember-qunit?

Если нет решения для № 2, было бы неплохо что-то вроде describe(moduleFor('controller:posts'), function() { … }).


person Brian Donovan    schedule 16.04.2014    source источник
comment
Обратите внимание, что Qunit теперь поддерживает вложенные модули «из коробки». Поддержка этого в ember-qunit отслеживается здесь: github.com/rwjblue/ember- квнит/вопросы/208   -  person Luke Melia    schedule 18.08.2016


Ответы (1)


describe в qunit-bdd в основном действует так же, как module в QUnit. Разница в том, что они могут быть вложены в 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 вызывается, нет (пока) возможности использовать qunit-bdd с ember-qunit. Мы обсуждаем, как это изменить. Ваше предложение может сработать, но потребует модификации qunit-bdd явно для ember-qunit. Я бы предпочел иметь общий код в 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();
  });
}));

Мы ценим любые предложения.

person Brian Donovan    schedule 16.04.2014