Hey,
I want to test my Rails app. When you click the image ajax sends to data to
DB and the data is updated in there. When I try to test, I faced with this
problem,
1) RwsController Update widget score takes widget rate information
Failure/Error:
mock_widget.should_receive(:update_attributes).with({'these' => 'params'})
(Mock "Widget_1003").update_attributes({"these"=>"params"})
expected: 1 time
received: 0 times
# ./spec/controllers/rws_controller_spec.rb:28:in `block (3 levels) in
<top (required)>'
*This is my actual controller which I try to test,*
class RwsController < ApplicationController
layout 'widget'
skip_before_filter :verify_authenticity_token, :only => [:edit, :update,
:show, :getUserInfo]
respond_to :js, :json, :html
#cookie check and show exact view
def show
@widget = Widget.find_by_uuid(params[:uuid])
if cookies["last_widget_id"] == @widget.uuid
render :action => "generate"
end
@widget = Widget.find_by_uuid(params[:uuid])
end
def edit
@widget = Widget.find_by_uuid(params[:uuid])
end
#after rating the rates and other details record on DB
def update
@widget = Widget.find_by_uuid(params[:uuid])
#logger.info("score-in: " + params[:score])
@widget.score = params[:score].to_i
@widget.total_score = params[:total_score].to_i
@widget.click_number = params[:click_number].to_i
@widget.average = params[:average].to_i
#set cookie
cookies[:last_widget_id] = {:value => @widget.uuid, :expires =>
1.year.from_now}
@widget.save!
#render :text => 'ok'
#logger.info("score-out: " + @widget.score.to_s)
#logger.info("cookie-id: " + cookies[:last_widget_id])
end
#iframe creates and calls .js.erb file
def generate
@widget = Widget.find_by_uuid(params[:uuid])
#@widget_id = @widget.id
respond_to do |format|
format.js {}
end
end
#recording the visitor who visit the page
def getUserInfo
data = params[:mainURL]
data1 = params[:mainBrowserAgent]
data2 = params[:mainReferer]
data3 = params[:mainDisplayInfo]
data4 = params[:currentWidgetId]
@widgetTraffic = WidgetTraffic.new(params[:widget_traffic])
@widgetTraffic.widget_id = @widget_id
@widgetTraffic.main_url = data
@widgetTraffic.main_browser = data1
@widgetTraffic.main_referer = data2
@widgetTraffic.main_display = data3
@widgetTraffic.widget_id = data4
@widgetTraffic.save!
render :text => 'ok'
end
end
*And this is my test controller,
*
require 'spec_helper'
describe RwsController do
def mock_widget(stubs={})
@mock_widget ||= mock_model(Widget, stubs).as_null_object
end
describe "Get widget" do
it "gets generated widget in iframe" do
Widget.stub(:find_by_uuid).with("10") { mock_widget(:save => true) }
get :generate ,:uuid => "10"
assigns(:widget) == @widget
response.should render_template(:js => "generate")
end
it "can not get generated widget in iframe" do
Widget.stub(:find_by_uuid).with("10") { mock_widget(:save => false) }
get :generate, :uuid => "10"
assigns(:widget) == @widget
response.code.should == "406"
end
end
describe "Update widget score" do
it "takes widget rate information" do
Widget.stub(:find_by_uuid).with("6").and_return(mock_widget(:update_attributes
=> true))
mock_widget.should_receive(:update_attributes).with({'these' =>
'params'})
xhr :put, :update, :uuid => "6", :widget => {'these' => 'params'},
:format => :js
response.should be_success
end
end
end
*Where is the stuck point? How should I solve it?*
--
View this message in context:
http://ruby.11.n6.nabble.com/RSpec-testing-update-action-with-ajax-tp4975810.html
Sent from the rspec-users mailing list archive at Nabble.com.
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users