0

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 に直接移動した後、ページの内容に対処する統合テストを作成できるように、テストまたは選択を書き直す方法が必要です。

4

1 に答える 1

0

私は今朝 IRC でしばらく過ごしましたが、からの選択Ember.Selectnull. これによりリダイレクトの問題は解決されましたが、セレクターが壊れました。値を選択しようとした最初の試行では変更がありませんでした。その後、正常に動作しました。

選択を拡張するカスタム ビューに移動し、Ember.Selectそこに変更アクションを配置しました。次に、ルーターを使用してコントローラーのプロパティの初期値を入力したところ、すべてが機能しているようです。

だから - レッスン:

1) カスタム ビューに変更イベントを配置します。コントローラーに直接観察させないでください。

2) コントローラがプロパティの変更を監視しているときは、初期値があることを確認してください。これは、データベースによって提供される値にのみ当てはまります。

于 2013-10-05T21:33:36.590 に答える