I'm working on some code that uses association proxies. I'm trying to
get away from using fixtures, and move more to mocking and stubbing.
So far, so good, but the methods I cant figure out, even with
extensive googling, are how to simulate the association_proxy.build
method in rails.
I'm on edge rails and edge rspec.
Datawise, a bar has_many suggested_beers, and a suggested_beer belongs
to a bar
suggested_beers_controller
class SuggestedBeersController < ApplicationController
before_filter :find_bar
#code omitted for brevity
# GET /bars/1/suggested_beers/new
def new
@suggested_beer = @bar.suggested_beers.build
respond_to do |format|
format.html
end
end
# POST /bars/1/suggested_beers
def create
@suggested_beer =
@bar.suggested_beers.build(params[:suggested_beer])
#more redaction
end
#code omitted for brevity
private
def find_bar
@bar = Bar.find(params[:bar_id])
end
suggested_beers_controller_spec.rb
This is generated with rspec_scaffold, and i've added in the beer_id,
bar_id, and ip_address attributes for stubbing.
def mock_suggested_beer(stubs={})
stubs = {
:save => true,
:update_attributes => true,
:destroy => true,
:to_xml => '',
:beer_id => "1",
:bar_id => "1",
:ip_address => "127.0.0.1"
}.merge(stubs)
@mock_suggested_beer ||= mock_model(SuggestedBeer, stubs)
end
describe "responding to GET /bars/1/suggested_beers/new" do
it "should succeed" do
get :new, :bar_id => "1"
response.should be_success
end
it "should render the 'new' template" do
get :new, :bar_id => "1"
response.should render_template('new')
end
it "should create a new suggested_beer" do
SuggestedBeer.should_receive(:new).and_return(mock_suggested_beer)
get :new, :bar_id => "1"
end
"should create a new suggested_beer" fails with this message
Spec::Mocks::MockExpectationError in 'SuggestedBeersController
responding to GET /bars/1/suggested_beers/new should create a new
suggested_beer'
Mock 'SuggestedBeer_1016' received unexpected message :[]= with
("bar_id", 1)
I don't know how to fix this.
I've looked at several articles, specifically
http://www.lukeredpath.co.uk/2007/10/18/demeters-revenge
and http://www.ruby-forum.com/topic/158489
but I'm still confused.
Any help is much appreciated!
--------------------------------
Sam Granieri, Jr
[EMAIL PROTECTED]
Chicago, IL
irc (freenode): samgranieri
http://www.samgranieri.com
http://www.beerbin.com
Recommend me at WWR!
http://www.workingwithrails.com/person/7374-sam-granieri
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users