【问题标题】:Testing an Ember.js component using hasBlock使用 hasBlock 测试 Ember.js 组件
【发布时间】:2015-07-07 15:57:56
【问题描述】:

我已经设置了这个组件(精简到最低限度):

<a href={{href}}>{{text}}</a>

{{#if template}}
  <button {{action "toggleSubmenu"}} class="global-nav-toggle-submenu">
    <i class="caret-down"></i>
  </button>
{{/if}}

还有这个测试:

test('has a toggle button if a submenu is present', function(assert) {
  var component = this.subject({
    template: Ember.HTMLBars.compile('<ul class="global-nav-submenu"></ul>')
  });

  assert.ok(this.$().find('.global-nav-toggle-submenu').length);
});

这运行良好,但我收到了来自 Ember 的弃用通知:

不推荐在&lt;app-name@component:global-nav-item::ember540&gt; 中访问“模板”。要确定是否为 &lt;app-name@component:global-nav-item::ember540&gt; 指定了块,请在组件布局中使用“{{#if hasBlock}}”。

当我将模板更改为使用 hasBlock 时:

<a href={{href}}>{{text}}</a>

{{#if hasBlock}}
  <button {{action "toggleSubmenu"}} class="global-nav-toggle-submenu">
    <i class="caret-down"></i>
  </button>
{{/if}}

测试失败。将this.$() 记录到控制台显示hbs 模板文件似乎忽略了我以编程方式添加的template

在测试中,我尝试将template 替换为blocklayouthasBlockcontent 等,但没有成功。我也试过用hasBlock: true 初始化subject

在应用了块的常规开发应用程序中加载页面时,逻辑运行良好:

{{#global-nav-item text="Hello" href="#"}}
  Some Content
{{/global-nav-item}}

为了测试这个逻辑,我应该以其他方式在单元测试中设置我的组件吗?

【问题讨论】:

    标签: ember.js htmlbars


    【解决方案1】:

    一般来说,你应该对这种类型的东西使用“新”风格的组件集成测试。

    查看以下资源:


    更新:根据 Robert 的回答链接的博客文章,这是tests/integration/components/global-nav-item-test.js 中的新测试代码:

    import hbs from 'htmlbars-inline-precompile';
    import { moduleForComponent, test } from 'ember-qunit';
    
    moduleForComponent('global-nav-item', 'Integration | Component | global-nav-item', {
      integration: true
    });
    
    test('has a toggle button if a submenu is present', function(assert) {
      this.render(hbs`
        {{#global-nav-item text="Hello" href="/"}}
          <ul class="le-global-nav-submenu"></ul>
        {{/global-nav-item}}
      `);
    
      assert.ok(this.$('.global-nav-toggle-submenu').length);
    });
    

    【讨论】:

    • 按照博文的指示,通过移动到单独的集成测试文件中,这对我有用。您是否觉得组件不再需要单元测试,或者说现在还为时过早?或者我想只有在测试 UI 元素时才需要集成测试......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2014-07-31
    • 2018-01-19
    相关资源
    最近更新 更多