2017-08-30 5 views
0

私はTrix Editorを使用して私のフォームにWISIWIGを持っています。私はRSpecとCapybaraでテストしたいが、trix-editorはフィールドを隠しておく。Rails - Capybara、trix-editorから隠されたフィールドを埋め込む

<div class="form-group"> 
    <trix-editor class="formatted_content form-control" placeholder="Description" input="annonce_ad_body_trix_input_annonce_ad"></trix-editor><input type="hidden" name="annonce_ad[body]" id="annonce_ad_body_trix_input_annonce_ad" /> 
</div> 

私は私が私のテストパスを作るためにカピバラと、この隠しフィールドを埋めることができます方法を知っておく必要があります。私はこれらのattempを試してみました:

fill_in "annonce_ad[body]", with: "my value" 
find(:css, 'trix-editor').set("New text") 
find("trix-editor", visible: false).set("my value") 
find(:xpath, "//input[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set "my value" 
find(:xpath, "//*[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set("value") 
first('input#annonce_ad_body_trix_input_annonce_ad.class', visible: false).set("your value") 

これらのどれも私の仕事はありません。この場合、私は自分の体をどのように(トリックスで)満たすことができますか?

答えて

-1

私は間違いを犯します。

find(:xpath, "//*[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set("some value here") 
+0

でデモトリックスエディタでカピバラの充填を示しfind( '#announce_ad_body_trix_input_announce_ad'、visible:false).set( "some value here") '。しかし、目に見えない要素とやりとりしているので、ユーザーが決してできなかったことをテストしているため、テストでは何もテストしていません。 –

+0

さて、ユーザがブラウザのインス​​ペクタを操作すると、システムの動作をテストできますが、コントローラ仕様でテストする方が簡単です。私はhttps://stackoverflow.com/a/45965124/299774に同意します - それは良い答えです。 – meta

2

カピバラを使用する場合、非標準コントロールを扱う際のルールは、ユーザーが何をするかを模倣することです。この場合は、可視フィールド(trix-editor要素)をクリックし、必要な内容を入力します。目に見えない要素を埋めることは絶対に避けてください。アプリをテストするときには、ほとんどの場合、visibleオプションを使用すべきではありません(カピバラをスクレイピングする場合には意味があります)。だから、

find('trix-editor').click.set('New text') 

する必要がありますあなたのケースではそれはおそらく、クリックせずに動作しますが、それは、より完全にユーザーを複製するために傷つけることはありません。あなたと非常によく似た何かがあなたのためには機能しないと言いましたが(実際のエラーは表示されません)、JS対応のドライバを実際に使用していないと仮定しなければなりません。 trixはJSドリブンのエディタなので、テストするときはJS対応のドライバ(https://github.com/teamcapybara/capybara#drivers)を使用する必要があります。

次の基本的なルビースニペット

は `これは(ほとんどの人が読むことのために非常に明確である)CSSのIDセレクタを使用するよりも違いはありませんtrix-editor.org

require 'capybara/dsl' 
require 'selenium-webdriver' 

sess = Capybara::Session.new(:selenium_chrome, nil) 
sess.visit('https://trix-editor.org/') 
editor = sess.find('trix-editor') 
editor.click.set('My test text') 
editor.assert_text('My test text') 
関連する問題