0

ページに画像があり、Ajax で削除しました。

画像の削除をテストしたい。

コントローラ:

def destroy

    current_image = Image.find(params[:id])
    current_car = current_image.car

    Image.delete_image_file(params[:id])    
    flash[:notice] = t('activerecord.errors.controllers.message.attributes.image.image_destroy_success')

    @images = current_car.images.order("order_id")

    respond_to do |format|
      format.html { redirect_to images_path(:car_id => params[:id]) }
      format.js
    end

  end

ファイル destroy.js.erb - ビューの更新とフラッシュ メッセージの表示

$('#image_list').html("<%= escape_javascript(render('list')) %>")
$('#div_flash_box').html("<%= escape_javascript(render :partial => 'layouts/flash', :locals => { :flash => flash }).html_safe %>")

画像の表示: _list.html.erb

<ul id="ul_images" data-update-url="<%= sort_images_url %>">  
  <% @images.each do |image| %>
    <%= content_tag_for :li, image, :class => 'ui-state-default' do %>     
     <%= link_to image_tag("#{RAILS_CAR_VIEW_IMAGES}" + "#{image.name}/" + image.image_thumb_file), "#{RAILS_CAR_VIEW_IMAGES}" + "#{image.name}/" + image.image_file, :class => 'group1' %>
     <div class="div-images-delete"><%= link_to t('views.buttons.delete'), image, :method => :delete, :remote => true, :confirm => t('views.forms.confirm') %></div>
    <% end %>
  <% end %>
</ul>

Rspec での私のテスト

it "should delete an image using Ajax" do
  lambda do
    xhr :delete, :destroy, :id => @image.id
    response.should be_success
  end.should change(Image, :count).by(-1)  
end



it "should destroy image" do
   xhr :delete, :destroy, :format => "html"
   flash[:notice].should == I18n.t('activerecord.errors.controllers.message.attributes.image.image_destroy_success')
end

車と画像は関係にあります

class Image < ActiveRecord::Base
  belongs_to :car,
   :foreign_key => "car_id"

class Car < ActiveRecord::Base

  has_many :images

失敗:

1) サインインしたユーザーの ImagesController は、Ajax の失敗/エラーを使用してイメージを削除する必要があります: xhr :delete, :destroy, :id => @image.id NoMethodError: undefined method images' for nil:NilClass # ./app/controllers/images_controller.rb:32:indestroy' # ./spec/controllers/images_controller_spec.rb: 36:inblock (4 levels) in <top (required)>' # ./spec/controllers/images_controller_spec.rb:35:inブロック (3 レベル) in '

2) サインインしたユーザーの ImagesController はイメージを破棄する必要があります 失敗/エラー: xhr :delete, :destroy, :format => "html" ActionController::RoutingError: ルートが一致しません {:format="html", :controller=> "images", :action=>"destroy"} # ./spec/controllers/images_controller_spec.rb:42:in `ブロック (3 レベル) in '

どうしたの?

4

2 に答える 2

1

最初のエラーは、削除しようとしている画像に関連する車がないためです。このテスト用のデータを作成するときに、車を作成するのを忘れていたようです。

id他のエラーは、テストでパラメーターを見逃したためです。

xhr :delete, :destroy, :format => "html"

する必要があります

xhr :delete, :destroy, :id => @image.id, :format => "html"
于 2012-08-28T17:55:14.337 に答える
1

最初のエラーについては、current_carオブジェクトがテスト環境に設定されていないと思います。が呼び出されたときに NilClass エラーが発生するのはそのため.imagesです。

于 2012-08-28T17:43:34.123 に答える