Ember.js アプリを作成しており、あるページにはEmber.Select
、Rails データベースからのモデルを選択する があります。選択の値は、選択に基づいてビューを変更するコントローラーのオブザーバーにバインドされます。ブラウザを使用している場合、これは適切に機能します。ただし、Capybara で統合テストを実行する場合 (webkit ドライバーと selenium ドライバーの両方を使用)、コントローラーのオブザーバーは、選択が行われていないときに、この選択で変更アクションを登録します。これにより遷移がトリガーされ、テストが失敗します。
簡略化されたバージョンのコードは次のとおりです。
のEmber.Select
<div class="select-dropdown">
{{view Prm.PropertySelect
contentBinding='properties'
optionLabelPath='content.name'
optionValuePath='content.id'
selectionBinding='selectedProperty'
id='property-selector'
classNames='property-selector'}}
</div>
Ember.Controller
アクション_
Prm.PropertyController = Ember.ObjectController.extend
selectedLead: null
selectedProperty: null
selectedPropertyChanged: (->
@transitionToRoute('property.index', @get('selectedProperty'))
).observes('selectedProperty')
カピバラ仕様
require 'spec_helper'
feature 'ember allows direct access to a lead via url', js: true do
scenario 'linking directly to lead' do
user = create_signed_in_user
lead = create_lead_for_user(user)
visit ember_lead_path(lead) # defined in a helper. Returns url as string.
assert_at_lead_detail(lead)
end
def assert_at_lead_detail(lead)
expect(page).to have_link 'All leads'
expect(page).to have_text lead.booking_request.name.upcase
end
end
オブザーバーを削除すると、テストに合格します。オブザーバーを削除しないと、テストは適切な URL に移動してからルートにリダイレクトされ、テストは失敗します。
Ember で URL に直接移動した後、ページの内容に対処する統合テストを作成できるように、テストまたは選択を書き直す方法が必要です。