Ich versuche, die Click-Ereignishandler auf der folgenden Backbone Ansicht spec:Wie testen, ob ein Backbone-Ansichtsereignis ein Objekt zu einer Sammlung hinzufügt?
class ItemView extends Backbone.View
events:
"click": "addToCurrentlyFocusedList"
addToCurrentlyFocusedList: (e) =>
window.currentlyFocusedList.add @model
Das ist, was ich habe:
describe "ItemView", ->
beforeEach ->
@item = new Backbone.Model
id: 1
name: "Item 1"
@view = new ItemView model: @item
describe "when clicked", ->
it "adds the item to the currently focused list", ->
window.currentlyFocusedList = sinon.stub()
window.currentlyFocusedList.add = sinon.stub()
@view.$el.trigger "click"
expect(window.currentlyFocusedList.add).toHaveBeenCalledWith @item
Dies funktioniert, aber es stört mich aus irgendeinem Grund. Vielleicht fühlt es sich zu sehr an, als würde ich die Implementierung testen.
Eine mögliche Verbesserung, die ich sehen kann, ist die Bewegung der Click-Ereignishandler, die Spezifikation und die currentlyFocusedList
in eine neue Ansicht AppView
genannt:
describe "AppView", ->
beforeEach ->
@view = new AppView
it "adds a clicked item to the currently focused list", ->
$clickedItem = @view.$(".item:first")
$clickedItem.trigger "click"
expect(@view.currentlyFocusedList.pluck('id')).toInclude $clickedItem.attr('data-id')
Es ist schön, dass diese beseitigt auch window
Verschmutzung. Es testet auch, dass das Objekt wirklich zur Sammlung hinzugefügt wird. Abgesehen davon verschiebt sich der Event-Handler und die Spezifikation in AppView
besser als mein erster Ansatz? Gibt es einen besseren Weg?
Subjektive Frage. Dies gehört wahrscheinlich zu http://programmers.stackexchange.com/ oder http://codereview.stackexchange.com/. –
Kühl. Ich wusste nichts von codereview.stackexchange.com. Danke für den Tipp! – Laconical