2014-11-22 22 views
2

我有我認爲是3個非常簡單的測試。組件測試Ember-CLI與{{link-to}}助手

1)檢查一個組件呈現屬性(燼-CLI自動生成此)

2)點擊其導航到 'user.index' 路線的類(這是一個{{鏈接到}})

3)點擊其中導航到「brands.index」路線的一類(這是一個{{鏈接到}})

我可以確認的是航線訪問,當我在瀏覽器中點擊它們,但是,測試失敗。儘管指定了「品牌鏈接」,但「品牌。索引」測試仍在期待「users.index」。

任何幫助將不勝感激!

的測試如下:

import { 
    moduleForComponent, 
    test 
    } from 'ember-qunit'; 

moduleForComponent('navigation-bar', 'NavigationBarComponent', { 
    // specify the other units that are required for this test 
    // needs: ['component:foo', 'helper:bar'] 
}); 

test('it renders', function() { 
    expect(2); 

    // creates the component instance 
    var component = this.subject(); 
    equal(component._state, 'preRender'); 

    // appends the component to the page 
    this.append(); 
    equal(component._state, 'inDOM'); 
}); 

test('it can navigate to users', function() { 
    expect(3); 

    var component = this.subject(); 
    equal(component._state, 'preRender'); 

    this.append(); 
    equal(component._state, 'inDOM'); 

    click('.users-link'); 

    andThen(function() { 
    equal(currentRouteName(), 'users.index'); 
    }); 
}); 

test('it can navigate to brands', function() { 
    expect(3); 

    var component = this.subject(); 
    equal(component._state, 'preRender'); 

    this.append(); 
    equal(component._state, 'inDOM'); 

    click('.brands-link'); 

    andThen(function() { 
    equal(currentRouteName(), 'brands.index'); 
    }); 
}); 

和組件模板是:

<nav class="navbar navbar-default" role="navigation"> 
    <div class="container-fluid"> 
     <div class="navbar-header"> 
      <a class="navbar-brand" href="#"> 
       <!--<img alt="Brand" src="...">--> 
      </a> 
     </div> 
     <ul class="nav navbar-nav"> 
      {{#link-to 'users' tagName='li' classNames='users-link'}}<a href="#">Users</a>{{/link-to}} 
      {{#link-to 'brands' tagName='li' classNames='brands-link'}}<a href="#">Brands</a>{{/link-to}} 
     </ul> 
    </div> 
</nav> 
+1

沒有回答你的問題,但是在使用鏈接時你不需要添加'a'標籤。 – kaungst 2014-11-23 12:56:49

回答

2

我相信這是因爲當你使用moduleForComponent幫助你沒有你的灰燼應用穿靴。 link-to幫助程序需要路由器,除非應用程序已實際啓動(即使用常規module幫助器並在beforeEach塊中調用startApp()),否則該路由器不會存在或無法正確設置。

我不確定這裏是最好的解決方案......你可以對使用這個組件的路由進行正常的集成測試,但這看起來很尷尬。

0

問題是,你正在嘗試在一個文件中進行集成測試,這個文件是用來進行單元測試的。閱讀:http://emberjs.com/guides/testing/

對於你需要做的是這樣的一個集成測試:

import Ember from 'ember'; 
import startApp from '../helpers/start-app'; 

var App, server; 

module('My First Integration Test', { 
    setup: function() { 
    App = startApp(); 
    }, 
    teardown: function() { 
    Ember.run(App, 'destroy'); 
    server.shutdown(); 
    } 
}); 

test('test something', function() { 
}); 

根據您的庫,代碼需要扭捏的版本。