2015-07-26 9 views
9

In Ember-CLI 1.13.1, ho il seguente test di integrazione nella mia componente:Ember Integrazione di prova per le azioni di chiusura

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(); 
}); 

Poi nella mia componente, ho questa azione:

import Ember from 'ember'; 

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

Il mio test continua a dire questo:

Un'azione denominata "onTabTouch" non è stata trovata in [oggetto oggetto].

Come si verifica un'azione di chiusura? Ho anche provato:

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

E non ha funzionato.

risposta

12

Sono riuscito a capirlo.

Invece di scrivere:

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

ho scritto questo:

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

EDIT:

Un modo migliore di farlo ora è come questo:

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

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

Si noti che (action onTabTouch) non ha virgolette doppie.

+0

grazie - curioso su come applicare questa patch oggi :) –

+0

Quest'ultimo dovrebbe funzionare. Lo sto usando fino ad ora. Non è per te? – rmmmp

+0

prima ho avuto un'azione basata su stringhe (non ha funzionato con le azioni di chiusura) -utilizzare il tuo esempio mi ha dato un test di lavoro :) –