Testing 测试主干模型从另一个带有摩卡的模型扩展而来

Testing 测试主干模型从另一个带有摩卡的模型扩展而来,testing,backbone.js,model,mocha.js,Testing,Backbone.js,Model,Mocha.js,当我对从另一个主干模型扩展而来的主干模型运行测试时(我使用的是Mocha、Chai和Sinon),我得到一个错误: TypeError:“未定义”不是对象(正在评估“模型”。\u实体”) 我认为通过实例化模型.\u entity这个错误会消失,但它不会。我应该改用存根吗 我在网上搜索了答案,但所有的例子都是针对直接从主干网扩展而来的模型,而不是其他模型 我需要做什么来避免这个错误 我的测试代码: describe("Model.address", function () { befor

当我对从另一个主干模型扩展而来的主干模型运行测试时(我使用的是
Mocha、Chai和Sinon
),我得到一个错误:

TypeError:“未定义”不是对象(正在评估“模型”。\u实体”)

我认为通过实例化
模型.\u entity
这个错误会消失,但它不会。我应该改用存根吗

我在网上搜索了答案,但所有的例子都是针对直接从
主干网扩展而来的模型,而不是其他模型

我需要做什么来避免这个错误

我的测试代码:

describe("Model.address", function () {

    beforeEach(function () {

        // build up a fake server
        this.server = sinon.fakeServer.create();

        this.server.autoRespond = true;

        this.parentModel = new Model._entity();

        this.Model_address = new Model.Address();
    });


    afterEach(function () {

        // delete fake server
        this.server.restore();
    });

    describe("Defaults", function () {

        // test defaults
        it("has default values", function () {
            // create empty model
            var model = this.Model_address;

            // expect model to be truthy
            expect(model).to.be.ok;


        });

    });
});
模型实体:

Model._entity = Backbone.Model.extend({

    initialize: function(options) {

        //If options passed with created and/or modified values, set the corresponding model attributes
        if (options && options.created && typeof options.created === 'string') {
            this.set('created', new Date(options.created));
        }
        if (options && options.modified && typeof options.modified === 'string') {
            this.set('modified', new Date(options.modified));
        }
    },

    defaults: function() {
        return {
            created: new Date(),
            modified: new Date()
        };
    }
});
型号.地址:

Model.Address = Model._entity.extend({
    invalidField: false,

    defaults: function () {
        var superDefs;  //defaults 'inherited' from parent model  

        superDefs = Model._entity.prototype.defaults.apply(this, arguments);
        return _.defaults(superDefs, {
            firstLine: '',
            secondLine: '',
            postalCode: '',     //TODO: move down
            houseNumber: '',    //TODO: move up 
            city: '',
            country: 'uk'
        });
    },

    urlRoot: function () {
        return '/checkout/address';
    },

    validate: function (attributes, options) {
        var attr;

        for (attr in attributes) {
            if (attributes[attr] === '') {
                this.invalidField = true;
                return 'Blank field';
            }
        }
    }
});

你能告诉我们你的地址模型和实体模型是什么样子吗?@garethdn我刚刚更新了一个问题,你不需要在实例化地址模型之前实例化实体模型。然而,实体模型应该在您尝试实例化地址模型之前加载到页面上,就像主干在您实例化任何模型之前加载到页面上一样。明白了!谢谢实际上,我是在实体模型之前加载地址模型的。这么简单的疏忽@garethdn如何编写测试来检查
validate
方法的返回值?我已经想出了
expect(“空白字段”).to.sative(这个.Model\u地址.validate)但是get和error
AssertionError:需要“空白字段”来满足[函数]