4 Stimmen

UnitTest für ein Modul mit Marionette.CompositeView

Ich möchte das Verhalten eines Moduls testen (mit Marionette), das funktioniert (1).

Seltsamerweise funktioniert das js-Modul (1), aber der Unit-Test (2) mit Jasmine schlägt fehl.

Irgendwelche Ideen?


(1)

/*global define*/
define([
    'marionette',
    'tasks/views/item',
    'text!tasks/templates/list.html',
    'collections/tasks'
], function (Marionette, itemView, listTemplate, TaskCollection) {
    "use strict";

    var ListView = Marionette.CompositeView.extend({

        initialize: function () {
            this.collection = new TaskCollection();
            this.collection.fetch();
        },

        template: listTemplate,

        itemView: itemView,

        appendHtml: function (collectionView, itemView) {
            collectionView.$el.find('ul.tasks').append(itemView.el);
        }

    });

    return ListView;
});

(2)

        // spec file
        it("sollte ein neues Element hinzufügen", function () {
            // TODO
            var itemView = new Backbone.View(),
                collectionView = new Backbone.View();
            this.view.appendHtml(collectionView, itemView);
            expect(this.view.$el.find('ul.tasks').length).toEqual(1); 
            // Erwartet wurde 0, um 1 zu entsprechen.
        });

0 Stimmen

Hast du die Tests so eingerichtet, dass sie mit RequireJS funktionieren? Wenn nicht, gibt es Tutorials im Web, die dir dabei helfen. Welche Fehlermeldungen bekommst du von den Tests?

0 Stimmen

@DerickBailey der Fehler, den ich bekomme, ist Erwartet 0, um 1 entspricht.. Ich vermute, dass das Ausführen von this.view.appendHtml(collectionView, itemView); ein neues Element hinzufügen sollte wie in (1).

0 Stimmen

Könnten Sie bitte ein jsFiddle einrichten, das dies in Aktion zeigt? Ich bin nicht vertraut genug mit Marionette, Backbone und Jasmine, um es selbst einzurichten, aber ich denke, ich könnte es zum Laufen bringen, wenn ich etwas zum Einstieg hätte.

3voto

theotheo Punkte 2574
var itemView = new Backbone.View(),
    collectionView = new Backbone.View();
    this.view.appendHtml(collectionView, itemView);

Entschuldigung, aber was möchtest du hier erreichen? Es scheint mir, dass du im Moment etwas an collectionView.$el.find('ul.tasks') anfügst, wenn collectionView.$el einfach leer ist. Also gibt collectionView.$el.find('ul.tasks') nichts zurück und so weiter.

Füge console.log() hinzu, um dies zu überprüfen:

appendHtml: function (collectionView, itemView) {
     console.log(collectionView.$el.html());
     collectionView.$el.find('ul.tasks').append(itemView.el);
}

0 Stimmen

+1 ja, du hast Recht. Aber wie soll ich dieses Stück Code testen?

0 Stimmen

Vielen Dank für Ihre Zeit. Posten Sie einen Kommentar, wenn das Beispiel veröffentlicht wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X