6

面白い状況です。次の単純な作成アクションをテストしています。

# will only be accessed via Ajax 
def create
 click = Click.new(params[:click])
 click.save # don't really care whether its success or failure
end

次に、次の非常に単純なコントローラー仕様があります。

require 'spec_helper'

describe ClicksController, "creating a click" do
  it "should create a click for event" do
    xhr :post, :create, :click => {:event_id => 1}
    # more test to come...
  end
end

些細なことのようですが、私は次のようになります。

テンプレートのクリック/作成がありません

ヒントをいただければ幸いです。

4

4 に答える 4

11

コントローラアクションに追加します。

render :nothing => true

これにより、適切なサーバーの応答が自動的に作成されます。詳細はこちら

于 2012-08-17T03:58:33.400 に答える
2

コントローラアクションで何もレンダリングしない場合、railsはデフォルトでテンプレート(この場合clicks/create)をレンダリングしようとします。少なくとも次のような成功メッセージをレンダリングして戻すことをお勧めします。

render :json => {:success => true}

于 2012-08-17T03:51:28.887 に答える
1

megas の回答に基づいて、UJS リンク経由でのみアクセスされ、.js.erb テンプレートしかないコントローラー アクションをテストする場合は、UJS 機能を壊さないようにこれをコントローラーに入れます。

respond_to do |f|
  f.html { render nothing: true } # prevents rendering a nonexistent template file
  f.js # still renders the JavaScript template
end

これにより、 を呼び出す必要がなく、 の // /ActionController::TestCase::Behaviorメソッドgetpost呼び出すだけでコントローラー アクションを呼び出すことができます。これは、UJS の動作を損なわずに、メソッドを正常に呼び出し、何もレンダリングせず、続行するためです。putdeletexhr

于 2014-02-26T21:30:57.863 に答える