That&#39;s great!<br><div><br class="webkit-block-placeholder"></div><div>Cheers!</div><div>sinclair<br><br><div><span class="gmail_quote">On 10/26/07, <b class="gmail_sendername">Ryan Heneise</b> &lt;<a href="mailto:lists@artofmission.com">
lists@artofmission.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="margin:0;margin-left:0.8ex;border-left:1px #ccc solid;padding-left:1ex">On Oct 26, 2007, at 12:11 PM, sinclair bain wrote:<br><br>&gt; Ryan,
<br>&gt;<br>&gt; Are you stubbing<br>&gt;<br>&gt; @current_company = Company.find_by_subdomain(account_subdomain)<br>&gt;<br>&gt;&nbsp;&nbsp;in the inherited&nbsp;&nbsp;#find_current_company method ?<br>&gt;<br>&gt; Make sure the @current_company is the same one upon which you have
<br>&gt; your expectations ?<br>&gt; ie<br>&gt;<br>&gt; before do<br>&gt;&nbsp;&nbsp;...<br>&gt;&nbsp;&nbsp;Company.stub!(:find_by_subdomain).and_return(@current_company)<br>&gt;<br>&gt;<br>&gt; end<br>&gt;<br>&gt; A pint and a bag of crisps says that does it !&nbsp;&nbsp;; )
<br>&gt;<br>&gt; Cheers!<br>&gt; sinclair<br><br><br>Absolutely smashing! It worked! Here&#39;s my setup now:<br><br>before do<br>&nbsp;&nbsp; @item = mock_model(Item)<br>&nbsp;&nbsp; @current_company = mock_model(Company)<br>&nbsp;&nbsp; Company.stub!
(:find_by_subdomain).and_return(@current_company)<br>&nbsp;&nbsp; @current_company.stub!(:find_items).with(&quot;1&quot;).and_return(@item)<br>end<br><br>What&#39;s your address - I&#39;ll send you a pint and a bag of crisps :)<br>
<br><br>Ryan<br><br><br><br><br><br><br><br><br>&gt; On 10/26/07, Ryan Heneise &lt; <a href="mailto:lists@artofmission.com">lists@artofmission.com</a>&gt; wrote:How do<br>&gt; you go about implementing and rspecing subdomains as account
<br>&gt; keys? I&#39;m sure that this must be an issues for others as well.<br>&gt;<br>&gt; So I have an app using subdomains as account keys. The Application<br>&gt; Controller sets up @current_company in a before filter. Everything is
<br>&gt; done within the context of the @current_company.<br>&gt;<br>&gt; After reading about Demeter&#39;s Revenge (<a href="http://www.lukeredpath.co.uk/">http://www.lukeredpath.co.uk/</a><br>&gt; 2007/10/18/demeters-revenge), and reading Sinclair&#39;s advice (link
<br>&gt; above), I refactored @current_company.items.find(:all) to<br>&gt; @current_company.find_items.<br>&gt;<br>&gt; Still no luck. The spec fails with:<br>&gt; -- Mock &#39;Company&#39; expected :find_items with (:all) once, but received
<br>&gt; it 0 times<br>&gt;<br>&gt; The other thing that bugs me is the size of the setup method. It&#39;s<br>&gt; getting too long and starting to smell. Obviously I must be making<br>&gt; this harder on myself that it needs to be.
<br>&gt;<br>&gt; Any ideas?<br>&gt;<br>&gt; (This question was originally posted under &quot;Mocking/Stubbing help<br>&gt; with subdomain as account key&quot;<br>&gt; - <a href="http://rubyforge.org/pipermail/rspec-users/2007-October/">
http://rubyforge.org/pipermail/rspec-users/2007-October/</a><br>&gt; 004138.html, but I&#39;ve rephrased it to make it more clear with the<br>&gt; subdomain as account key question.)<br>&gt;<br>&gt;<br>&gt; # items_controller_spec.rb
<br>&gt; describe ItemsController, &quot;handling GET /items&quot; do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;fixtures :companies<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;before do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@request.host = &quot;subdomain.test.host&quot;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@item = mock(Item)
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Item.stub!(:find).and_return([@item])<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@current_company = mock(Company)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@current_company.stub!(:items).and_return([])<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@current_company.stub!(:find_items).and_return([@item])
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@current_company.stub!(:subdomain).and_return(&quot;subdomain&quot;)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; # Passes<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;def do_get<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get :index<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; # Passes<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;it &quot;should be successful&quot; do
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_get<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.should be_success<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; # Passes<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;it &quot;should render index template&quot; do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_get<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.should render_template(&#39;index&#39;)
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;# FAILS with message:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;# Mock &#39;Company&#39; expected :find_items with (:all) once, but<br>&gt; received it 0 times<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;it &quot;should find all items&quot; do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@current_company.should_receive(:find_items).with
<br>&gt; (:all).and_return([@item])<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_get<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;# Passes<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;it &quot;should assign the found items for the view&quot; do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_get<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assigns[:items].should == [@item]
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt; end<br>&gt;<br>&gt;<br>&gt; # items_controller.rb<br>&gt; class ItemsController &lt; ApplicationController<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;def index<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@items = @current_company.find_items(:all)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end
<br>&gt; end<br>&gt;<br>&gt;<br>&gt; # company.rb<br>&gt; class Company &lt; ActiveRecord::Base<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;has_many :items<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;def find_items(*args)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;items.find(*args)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt; end<br>&gt;
<br>&gt;<br>&gt; # application.rb<br>&gt; class ApplicationController &lt; ActionController::Base<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;before_filter :find_current_company<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;def find_current_company<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@current_company = Company.find_by_subdomain
(account_subdomain)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&gt; end<br>&gt;<br>&gt;<br>&gt;<br>&gt; _______________________________________________<br>&gt; rspec-users mailing list<br>&gt; <a href="mailto:rspec-users@rubyforge.org">rspec-users@rubyforge.org
</a><br>&gt; <a href="http://rubyforge.org/mailman/listinfo/rspec-users">http://rubyforge.org/mailman/listinfo/rspec-users</a><br>&gt;<br>&gt;<br>&gt;<br>&gt; --<br>&gt;<br>&gt;<br>&gt; Cheers!<br>&gt; sinclair<br>&gt; _______________________________________________
<br>&gt; rspec-users mailing list<br>&gt; <a href="mailto:rspec-users@rubyforge.org">rspec-users@rubyforge.org</a><br>&gt; <a href="http://rubyforge.org/mailman/listinfo/rspec-users">http://rubyforge.org/mailman/listinfo/rspec-users
</a><br><br>_______________________________________________<br>rspec-users mailing list<br><a href="mailto:rspec-users@rubyforge.org">rspec-users@rubyforge.org</a><br><a href="http://rubyforge.org/mailman/listinfo/rspec-users">
http://rubyforge.org/mailman/listinfo/rspec-users</a><br></blockquote></div><br><br clear="all"><br>-- <br><br><br>Cheers!<br>sinclair
</div>