使用jasmine
,我正在尝试测试一个返回Marionette.CompositeView
的javascript模块。
这是javascript模块(2)和javascript单元测试(1)。
我的问题是如何从(1)访问渲染视图?
有关详细信息,请参阅代码注释。
P.S .:
1)javascript模块可以生成正确的渲染视图
2)当我运行测试时,javascript控制台给出了以下错误:backbone.marionette.min.js:9
Uncaught NoTemplateError: Could not find template: 'function (context, options) {
if (!compiled) {
compiled = compile();
}
return compiled.call(this, context, options);
}'
3)因为我正在使用handlebars
,所以我用这种方式重新编写了Marionette.Renderer.render
:
enter code here
define([
'marionette'
], function (Marionette) {
Marionette.Renderer.render = function (template, data) {
return template(data);
};
});
(1)
(function () {
'use strict';
define([
// some code
], function (MyView) {
describe('Layout App - Header View ', function () {
beforeEach(function () {
this.view = new MyView({
currentUser: new Backbone.Model()
});
});
describe('Instantiation', function () {
it('should create a div element', function () {
expect(this.view.el.nodeName).toEqual('DIV'); // it works
});
});
describe("Rendering", function () {
it("returns the view object", function () {
console.log(this.view.render()); // undefined // why?
expect(this.view.render()).toEqual(this.view); // it fails
});
});
});
});
});
(2)
define([
// some code
], function (myTemplate, MyItemView) {
return Marionette.CompositeView.extend({
template: myTemplate,
itemView: MyItemView,
// some code
});
});
答案 0 :(得分:1)
在其上调用render
方法,就像使用任何其他骨干视图一样
beforeEach(function () {
this.view = new MyView({
currentUser: new Backbone.Model()
});
// render it
this.view.render();
});
答案 1 :(得分:0)
实际上,render方法会返回undefined
。而不是expect(this.view.render())
,你应该做类似
this.view.render();
expect(this.view.$el.find('.class_in_template').length).to.be.greaterThan(0);