2012-08-14 36 views
4

通过使用jasmine,我试图测试一个JavaScript模块,它返回一个Marionette.CompositeView单元测试与Marionette.CompositeView

这里是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 
    }); 

}); 

回答

1

调用render方法就可以了,就像你使用任何其他骨干视图


      beforeEach(function() { 
       this.view = new MyView({ 
        currentUser: new Backbone.Model() 
       }); 

       // render it 
       this.view.render(); 
      }); 
+0

嗨德里克,感谢您的回复。其实,你的建议并没有解决这个问题。无论如何,我添加了更多关于我的问题的信息请参阅“P.S.”部分,第2和第3点 – 2012-08-14 12:37:24

0

渲染方法呢,其实,返回undefined。取而代之的expect(this.view.render()),你应该这样做

this.view.render(); expect(this.view.$el.find('.class_in_template').length).to.be.greaterThan(0);