Как проверить, вызывается ли действие в компоненте ember testing

Как я могу проверить, что действие было вызвано в компоненте?

Существует несколько способов запуска действия, например нажатия кнопки. Теперь я хочу проверить, что действие, которое вызывается при нажатии на эту кнопку, действительно вызывается. Что-то вроде expect.functionName.to.be.called или что-то в этом роде.

У меня есть следующий код

test('it closes the create dialog when close btn is clicked', function(assert) {
  this.render(hbs`{{group-create cancelCreateAction="cancelAction"}}`)

  this.$('button.btn--primary').click()
  expect('myAction').to.be.called?
})

так что мне просто интересно, что я могу там сделать?


person user1952811    schedule 08.11.2015    source источник


Ответы (2)


Что ж, твои действия делают что-то, чего мы не знаем. Но вот небольшой тест, который я написал для проверки некоторых элементов DOM и текущего маршрута. Трудно сказать, не рассказав нам, что делает ваше действие.

click('.someSavingButton');

   andThen(function() {
     assert.equal(currentRouteName(), 'index');
     assert.equal(find('.something-new-in-the-dom').length, 1, "New item in HTML");
person kris    schedule 08.11.2015
comment
В Ember 2.1.0 такие вещи делать нельзя. Как вы импортируете функции click и andThen? - person user1952811; 09.11.2015
comment
импортировать {модуль, тест} из 'qunit'; импортировать startApp из '../helpers/start-app'; - person kris; 09.11.2015
comment
вы все равно получите неопределенное значение для andThen и click. Откуда вы это импортируете? - person user1952811; 11.11.2015
comment
Я написал эти тесты 3 месяца назад, тогда они работали отлично. gist.github.com/kristjanreinhold/d62616b921c5bac042ba Вот полный тест. В наше время не работает? - person kris; 11.11.2015
comment
Не уверен, какую тестовую среду вы используете, или это версия 1.10.0 или что-то в этом роде, потому что нам нужен явный импорт для click, andThen. Просто так не получится. Вы можете попробовать обновиться до версии 2.1.0 и посмотреть, работает ли она у вас. - person user1952811; 11.11.2015

Я наткнулся на этот вопрос, а также искал способ проверить действия пузыря в интеграционном тесте (вместо действий закрытия). Возможно, вы уже нашли решение, но я отвечу, чтобы следующий человек нашел его раньше меня.

Идиоматический способ проверить, было ли вызвано действие, — написать фиктивную функцию и подтвердить, что она будет вызвана. В вашем примере - перед действиями закрытия - способ написания такого теста выглядит следующим образом:

test('it closes the create dialog when close btn is clicked', function(assert) {
  // make sure our assertion is actually tested
  assert.expect(1);

  // bind the action in the current test
  this.on('cancelAction', (actual) => {
    let expected = { whatever: 'you have expected' };
    assert.deepEquals(actual, expected);

    // or maybe just an assert.ok(true) - but I am not sure if this is "good" style
  });

  this.render(hbs`{{group-create cancelCreateAction="cancelAction"}}`)

  this.$('button.btn--primary').click()
  expect('myAction').to.be.called?
});

В настоящее время, с парадигмой действия замыкания, правильным способом привязки фиктивной функции будет

// bind the action in the current test
this.set('cancelAction', (actual) => {
  let expected = { whatever: 'you have expected' };
  assert.deepEquals(actual, expected);
});

this.render(hbs`{{group-create cancelCreateAction=(action cancelAction)}}`)
person Martin Schneider    schedule 12.02.2016