2015-07-26 3 views
9

В Ember-CLI 1.13.1, я следующий интеграционный тест в моем компоненте:Ember Интеграция Тест на закрытие действия

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

moduleForComponent('category-tabs', 'Integration | Component | category tabs', { 
    integration: true 
}); 

test('tapping button fires an external action', function(assert) { 
    this.on('onTabTouch', function(value) { 
    assert.equal(value, 'Expense'); 
    }); 

    this.render(hbs` 
    {{category-tabs onTabTouch=(action "onTabTouch")}} 
    `); 

    this.$('button:first').click(); 
}); 

Тогда в моем компоненте, у меня есть это действие:

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    actions: { 
    handleTabTouch(tab) { 
     this.attrs.onTabTouch(tab); 
    } 
    } 
}); 

Мой тест продолжает говорить об этом:

Действие в названии 'onTabTouch' не найдено в [object Object].

Как проверить действие закрытия? Я также пробовал:

this.set('onTabTouch', function(value) { 
    assert.equal(value, 'Expense'); 
}); 

И это не сработало.

ответ

12

Мне удалось выяснить это.

Вместо того чтобы писать:

this.on('onTabTouch', function(value) { 
    assert.equal(value, 'Expense'); 
}); 

Я написал:

this.set('actions', { 
    onTabTouch(value) { 
    assert.equal(value, 'Expense'); 
    } 
}); 

EDIT:

Лучший способ сделать это сейчас, как это:

this.set('onTabTouch',() => assert.ok(true)); 

this.render(hbs` 
    {{category-tabs onTabTouch=(action onTabTouch)}} 
`); 

Обратите внимание, что (action onTabTouch) не имеет двойных кавычек.

+0

спасибо - любопытно, как исправить это сегодня :) –

+0

Последний должен работать. Я использовал это до сих пор. Разве это не для вас? – rmmmp

+0

Вначале у меня было действие на основе строки (не работало с действиями закрытия) - используя ваш пример, я получил рабочий тест :) –

Смежные вопросы