Javascript文件的小茉莉花测试:测试它的最佳方法

时间:2015-01-07 17:22:43

标签: backbone.js jasmine marionette karma-runner karma-jasmine

首先,我想说我是Jasmine的新人,所以如果这个问题非常基本,我请求你理解。我正在为这个文件写一个测试:

define([
    'q',
    'backbone',
    'marionette',
    'education/eet/views/destinationview',
    'education/eet/views/editdestinationview',
    'education/eet/models/destination',
    'common/ajaxerrorhandler',
    'common/alertdialog'
], function (Q, Backbone, Marionette, DestinationView, EditDestinationView, Destination, AjaxErrorHandler, AlertDialog) {
    'use strict';

    var ReferenceDataController = Marionette.Controller.extend({

        initialize: function (options) {
            this._subjectCompositeId = options.subjectCompositeId;
        },

        getView: function (destinationTypes, editMode) {
            var self = this,
                deferred = Q.defer(),
                destination = new Destination();

            destination.fetch({
                data: {subjectCompositeId: self._subjectCompositeId}
            }).done(function () {
                var view;
                if (editMode) {
                    view = new EditDestinationView({
                        model: destination,
                        'destinationTypes': destinationTypes
                    });
                    view.on('click:saveDestination', self._handleSaveDestination, view);
                } else {
                    view = new DestinationView({
                        model: destination
                    });
                }
                deferred.resolve(view);
            }).fail(function (jqXHR) {
                deferred.reject(jqXHR);
            });

            return deferred.promise;
        },

        _handleSaveDestination: function () {
            if (this.model.isValid(true)) {
                this.model.save(null, {
                    success: function () {
                        Backbone.Wreqr.radio.vent.trigger('education', 'show:destination');
                    },
                    error: function (jqXHR) {
                        var userFriendlyErrorString = AjaxErrorHandler.buildDefaultErrorMessage(jqXHR);
                        return new AlertDialog(userFriendlyErrorString);
                    }
                });
            }
        }
    });

    return ReferenceDataController;
});

问题是我不太确定如何访问其中的变量来测试它。我是一名Java测试人员,但即使在我写作的时候也从未测试过Javascript,所以我对它非常困惑。

任何提示或代码都会被实际欣赏。

感谢。

1 个答案:

答案 0 :(得分:1)

将Jasmine suite / spec视为依赖于此模块的应用程序。

我们将我们的规范作为 RequireJS 模块,需要相应的模块,实例化它 - 有时在模块级别,有时在套件(describe)级别,有时在规范({{1 }})level。

此时,由于您(在it中)可以访问该类的实际实例,您可以调用其各种方法并使用

形式的各种断言测试结果
it

或类似。