【问题标题】:Jasmine / Backbone茉莉花 / 骨干
【发布时间】:2015-07-26 21:59:21
【问题描述】:

我的 Jasmine 测试曾经通过。但是,我实现了一个 Base Backbone 视图,它为一些常见视图提供了功能。在此之后,我无法通过下面的简单测试。似乎 DOM 元素 (div) 不存在,因此我的显示视图未正确呈现。关于为什么会发生这种情况以及解决方法的任何想法或建议?

两个主干视图,一个从另一个延伸出来:

var stockShowView = Base.extend({
  tagName: 'div',
  className: 'showSecurity',
  template: _.template(showTpl),
  ....
  render: function() {
    this.$el.html(this.template({
      stock: this.model.toJSON()
    }));
  }
  ....return stockShowView;

var Base = Backbone.View.extend({
  initialize: function() {....//no render function

茉莉花测试

  stock_showView = new stockShowView({model: model});
  stock_showView.render();

  expect(stock_showView.tagName).toEqual('div');

错误

 Cannot read property 'length' of undefined

路由器

  router.on('route:showPost', function(id) {
    if (globals.stocks) {
      var stockpost = new StockModel({_id: id});
        stockpost.fetch({
          reset: true,
          success: function(stockpost) {
            var stock_showView = new stockShowView({model: stockpost});
            $("#view_box").html(stock_showView.render().el);
          }
      });

【问题讨论】:

  • 没有完整的代码是不可能的。分享更多,最好是在 jsFiddle 中
  • 是的,你是对的。但是,它有很多代码。我想我的主要问题是当像上面那样调用 .render() 时,Jasmine 是否会进入渲染函数的基本视图而不是 stockShowView 显式?它是否使用了 Backbone 的路由器,因为我有一个 if 语句(添加到问题中)?还是只是试图渲染 stock_showView?

标签: backbone.js jasmine


【解决方案1】:

您应该使用大写字母编写 tagName 元素。试试这个:

expect(stock_showView.el.nodeName).toEqual("DIV");

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2014-02-21
  • 2018-02-22
相关资源
最近更新 更多