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和errorAssertionError:需要“空白字段”来满足[函数]