2016-05-09 5 views
2

Ich habe ein Polymer Element verwendet, das in etwa so eingerichtet ist:Unit-Tests Polymer Listener, this.fire

Polymer({ 

    is: 'some-element', 


    properties: { 
    //properties 
    }, 

    listeners: { 
    'something-happened': '_onSomethingHappening' 
    }, 
    someFunction: function() {}, 

    anotherFunction: function() { // something-happened listener is executed here}, 

    _onSomethingHappening: function(e) { 
     this.fire('it-happened', {e.someInfo}); 
    } 
}) 

Ich habe Gerät alle Funktionen getestet, aber ich brauche für die _onSomethingHappening Veranstaltung zu testen. Ich versuche, den Rückgabewert des this.fire-Ereignisses zu erfassen, aber das funktioniert nicht. Der Unit-Test ich im Sinne habe, ist so etwas wie diese:

test('_onSomethingHappened', function() { 

    var ev = some-element._onSomethingHappened(); 
    assert(typeof ev, 'object'); 

}); 

Die Sache ist, wenn ich das tue, sagt er, dass kein Ereignis auf den Hörer übergeben wurde, so deshalb der Test nicht bestanden. Gibt es eine Möglichkeit, diesen Test so zu strukturieren, dass er funktioniert? Gibt es eine Möglichkeit zu sagen, dass ein JS.fire Event ausgeführt wurde?

Antwort

2

Mit Web Component Tester können Sie SinonJS spy auf die Methode fire Ihres Testgeräts verwenden und bestätigen, dass es mit bestimmten Parametern aufgerufen wurde.

test.html:

<test-fixture id="basic"> 
    <template> 
    <my-list></my-list> 
    </template> 
</test-fixture> 

<script> 
    describe('my-list', function() { 
    var list; 

    beforeEach(function() { 
     list = fixture('basic'); 
    }); 

    it('fires "foo" event with {bar: xxx}', function() { 
     sinon.spy(list, 'fire'); 

     var e = {someInfo: 100}; 
     list._onSomethingHappened(e); 
     expect(list.fire).to.have.been.calledWith('foo', {bar: e.someInfo}); 
    }); 
    }); 
</script> 

Alternativ können Sie testen, dass das Element das Ereignis emittiert.

describe('my-list', function() { 
    ... 
    it('emits "foo" event with {bar: xxx}', function() { 
    list._onTestFoo = sinon.spy(); 
    list.listen(list, 'foo', '_onTestFoo'); 

    var e = {someInfo: 100}; 
    list._onSomethingHappened(e); 
    expect(list._onTestFoo).to.have.been.called; 
    expect(list._onTestFoo.args[0][0].detail).to.deep.equal({bar: e.someInfo}); 
    }); 
}); 

Das Polymer Test Guide und Polymer Starter Kit test/my-list-basic.html könnte als Ausgangspunkt hilfreich sein.

Verwandte Themen