I'm new in using RSpec and I can't figured out to spec this controller
action.
class OrdersController < ApplicationController
before_filter :authenticate_user!
def index
respond_with(@orders = current_user.orders)
end
end
When I want to spec this "@assets = Asset.all" I use "Asset.stub(:all)
{ [mock_asset] }" as I read in the RSpec book but with
"current_user.orders" I don't know how to do.
NB: I'm using Rails 3.0.0.rc2 and RSpec 2.0.0.beta.20
Thanks in advance.
Jérémie Horhant
_______________________________________________
rspec-users mailing list
rspec...@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users
> Hello,
>
> I'm new in using RSpec and I can't figured out to spec this controller
> action.
>
> class OrdersController < ApplicationController
> before_filter :authenticate_user!
>
> def index
> respond_with(@orders = current_user.orders)
> end
> end
>
> When I want to spec this "@assets = Asset.all" I use "Asset.stub(:all)
> { [mock_asset] }" as I read in the RSpec book but with
> "current_user.orders" I don't know how to do.
>
> NB: I'm using Rails 3.0.0.rc2 and RSpec 2.0.0.beta.20
What is the behaviour you want to specify?
describe OrdersController do
include Devise::TestHelpers
def mock_order(stubs={})
@mock_order ||= mock_model(Order, stubs).as_null_object
end
describe "GET index" do
it "assigns user's orders to @orders" do
current_user.stub!(:orders).and_return([mock_order])
get :index
assigns(:orders).should eq([mock_order])
end
end
end
I tried with this code but the test failed with this error :
Failure/Error: current_user.stub!(:orders).and_return([mock_order])
undefined local variable or method `current_user' for
#<RSpec::Core::ExampleGroup::Nested_7::Nested_1:0x000000057059e0>
> rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
# ~/.autotest
require 'autotest/growl'
Autotest.add_hook(:initialize) { |at|
at.add_exception %r{^\.git} # ignore Version Control System
at.add_exception %r{^./tmp} # ignore temp files, lest autotest will run again, and again...
# at.clear_mappings # take out the default (test/test*rb)
at.add_mapping(%r{^lib/.*\.rb$}) {|f, _|
Dir['spec/**/*.rb']
}
nil
}
Autotest.add_hook :initialize do |at|
at.add_mapping(%r%^spec/(integration)/.*rb$%) {|filename, _|
filename
}
end
# {RAILS_ROOT}/autotest/.discover.rb
Autotest.add_discovery { "rails" }
Autotest.add_discovery { "rspec2" }
# {RAILS_ROOT/.rspec
--format nested
--color
Output when running autotest:
$ RSPEC=true autotest
(Not running features. To run features in autotest, set AUTOFEATURE=true.)
loading autotest/rails
--------------------------------------------------------------------------------
And, here are my bundled gems:
Gems included by the bundle:
* abstract (1.0.0)
* actionmailer (3.0.0.rc)
* actionpack (3.0.0.rc)
* activemodel (3.0.0.rc)
* activerecord (3.0.0.rc)
* activeresource (3.0.0.rc)
* activesupport (3.0.0.rc)
* arel (0.4.0)
* builder (2.1.2)
* bundler (1.0.0.rc.6)
* capybara (0.3.9)
* cucumber (0.8.5)
* cucumber-rails (0.3.2)
* culerity (0.2.12)
* diff-lcs (1.1.2)
* erubis (2.6.6)
* ffi (0.6.3)
* gherkin (2.1.5)
* i18n (0.4.1)
* json_pure (1.4.6)
* mail (2.2.5)
* mime-types (1.16)
* nokogiri (1.4.3.1)
* polyglot (0.3.1)
* rack (1.2.1)
* rack-mount (0.6.12)
* rack-test (0.5.4)
* rails (3.0.0.rc)
* railties (3.0.0.rc)
* rake (0.8.7)
* rspec (2.0.0.beta.20)
* rspec-core (2.0.0.beta.20)
* rspec-expectations (2.0.0.beta.20)
* rspec-mocks (2.0.0.beta.20)
* rspec-rails (2.0.0.beta.20)
* rubyzip (0.9.4)
* selenium-webdriver (0.0.28)
* sqlite3-ruby (1.3.1)
* term-ansicolor (1.0.5)
* thor (0.14.0)
* treetop (1.4.8)
* trollop (1.16.2)
* tzinfo (0.3.23)
This is driving me up the wall...any ideas?
Best,
Brennon
Brennon Bortz
Software Researcher
Dundalk Institute of Technology
brenno...@casala.ie
Ph.D. Researcher & Composer - Sonic Arts Research Centre
Queen's University, Belfast
bre...@brennonbortz.com / bbor...@qub.ac.uk
Thanks again,
1. Get rid of 'Autotest.add_discovery { "rails" }' from ./autotest/discover.rb.
2. Add autotest-rails to the Gemfile.
If any of the gems listed in the Gemfile have :path or :git options, you need to run "bundle exec autotest".
HTH,
David
> I tink it's @orders should be an array of orders from
> current_user.orders.
>
> describe OrdersController do
> include Devise::TestHelpers
>
> def mock_order(stubs={})
> @mock_order ||= mock_model(Order, stubs).as_null_object
> end
>
> describe "GET index" do
> it "assigns user's orders to @orders" do
> current_user.stub!(:orders).and_return([mock_order])
>
> get :index
> assigns(:orders).should eq([mock_order])
> end
> end
> end
>
> I tried with this code but the test failed with this error :
>
> Failure/Error: current_user.stub!(:orders).and_return([mock_order])
> undefined local variable or method `current_user' for
> #<RSpec::Core::ExampleGroup::Nested_7::Nested_1:0x000000057059e0>
Right. That's because there is no current_user in the example, it's in the controller. Make sense? So you need to stub current_user in the controller as well:
user = double('user')
controller.stub(:current_user) { user }
user.stub(:orders) { [mock_order] }
get :index
assigns(:orders).should eq([mock_order])
HTH,
David
Many thanks,
Brennon
On 27 Aug 2010, at 14:06, David Chelimsky wrote:
> On Aug 27, 2010, at 6:47 AM, Brennon Bortz wrote:
>
>> Not sure what I must have bumped, but autotest won't run any specs--only features. No errors are given on startup. I've taken "export AUTOFEATURE=true" out of my ./bashrc file--now I just get a blank screen when running autotest. Adding "export RSPEC=true" to .bashrc doesn't change anything either.
>
> 1. Get rid of 'Autotest.add_discovery { "rails" }' from ./autotest/discover.rb.
> 2. Add autotest-rails to the Gemfile.
>
> If any of the gems listed in the Gemfile have :path or :git options, you need to run "bundle exec autotest".
>
> HTH,
> David
>
> _______________________________________________
> rspec-users mailing list
> rspec...@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
Brennon Bortz
Software Researcher
Dundalk Institute of Technology
brenno...@casala.ie
Ph.D. Researcher & Composer - Sonic Arts Research Centre
Queen's University, Belfast
bre...@brennonbortz.com / bbor...@qub.ac.uk
_______________________________________________
> On 27 Aug 2010, at 14:29, Brennon Bortz wrote:
>
>> On 27 Aug 2010, at 14:06, David Chelimsky wrote:
>>
>>> On Aug 27, 2010, at 6:47 AM, Brennon Bortz wrote:
>>>
>>>> Not sure what I must have bumped, but autotest won't run any specs--only features. No errors are given on startup. I've taken "export AUTOFEATURE=true" out of my ./bashrc file--now I just get a blank screen when running autotest. Adding "export RSPEC=true" to .bashrc doesn't change anything either.
>>>
>>> 1. Get rid of 'Autotest.add_discovery { "rails" }' from ./autotest/discover.rb.
>>> 2. Add autotest-rails to the Gemfile.
>>>
>>> If any of the gems listed in the Gemfile have :path or :git options, you need to run "bundle exec autotest".
>>>
>>> HTH,
>>> DavidStrange...that does work, but now autotest seems caught in an infinite loop. When I run autospec, the specs run, then the features, then the features again...and again...and again...and so on. If I run autotest as follows: "AUTOFEATURE=false autotest", I don't have the problem. Any other ideas?
> And now (I haven't touched anything...seriously!), even "AUTOFEATURE=false autotest" gives me an endless loop of spec tests...
(I moved your posts to the bottom so we can read them in order. Please post at the bottom or inline.)
I've seen this happen when files are generated during a spec run. What's in spec/spec.opts and cucumber.yml?
No spec.opts file, and just the default cucumber.yml file (I believe):
<%
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags ~@wip"
%>
default: <%= std_opts %> features
wip: --tags @wip:3 --wip features
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
Unless you're running cucumber with --profile rerun, this shouldn't be a problem.
Do any of your specs generate files? Also, did you try both "autotest" and "bundle exec autotest" with the same results?
before { sign_in(user_record) }
describe "#index" do
before do
controller.current_user.stub(:orders) { ... }
end
it "..." do
get :index
end
end
Hope that helps.
On Aug 24, 7:51Â pm, Titinux <jeremie.horh...@titinux.net> wrote:
> Hello,
>
> I'm new in using RSpec and I can't figured out to spec this controller
> action.
>
> class OrdersController < ApplicationController
> Â before_filter :authenticate_user!
>
> Â def index
> Â Â respond_with(@orders = current_user.orders)
> Â end
> end
>
> When I want to spec this "@assets = Asset.all" I use "Asset.stub(:all)
> { [mock_asset] }" as I read in the RSpec book but with
> "current_user.orders" I don't know how to do.
>
> NB: I'm using Rails 3.0.0.rc2 and RSpec 2.0.0.beta.20
>
> Thanks in advance.
> Jérémie Horhant
> _______________________________________________
> rspec-users mailing list
> rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
Apologies - this changed and I forgot. Put "Autotest.add_discovery { "rails" }" back in ./autotest/discover.rb and put autotest (not autotest-rails) in the Gemfile.
Argh...this problem stopped occurring--thought I wouldn't have to deal with it again. Same setup as we've already discussed--just a loop of cucumber features. Specs are run, but only once when a file is changed, and then it's back to the features loop. I've tried both "autotest" and "bundle exec autotest". "autotest" gives me the behaviour I've described. "bundle exec autotest" yields the following error:
<internal:lib/rubygems/custom_require>:29: warning: loading in progress, circular require considered harmful - /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/setup.rb:1:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:2:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:1136:in `<top (required)>'
from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:968:in `load_plugins'
from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:968:in `each'
from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:976:in `block in load_plugins'
from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:976:in `load'
from /Users/brennon/.rvm/gems/ruby-1.9.2-p0@stan/gems/hanna-0.1.12/lib/rubygems_plugin.rb:2:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/doc_manager.rb:8:in `<top (required)>'
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
/Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:84: warning: method redefined; discarding old gem
/Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:81: warning: previous definition of gem was here
/Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:116: warning: method redefined; discarding old from_gems_in
/Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/source_index.rb:75: warning: previous definition of from_gems_in was here
/Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:125: warning: method redefined; discarding old refresh
/Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:728: warning: previous definition of refresh was here
/Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:126: warning: method redefined; discarding old bin_path
/Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:323: warning: previous definition of bin_path was here
/Users/brennon/.rvm/gems/ruby-1.9.2-p0@stan/gems/autotest-4.3.2/lib/autotest.rb:275: warning: (...) interpreted as grouped expression
loading autotest/cucumber_rails
Error loading Autotest style autotest/cucumber_rails (no such file to load -- autotest/rails). Aborting.
Any ideas? Thanks!
Anyone have any ideas? I'm dyin' without autotest here... :(
> _
>> hanna-0.1.12/lib/rubygems_plugin.rb:2:in `<top (required)>'
>> from <internal:lib/rubygems/custom_require>:29:in `require'
>> from <internal:lib/rubygems/custom_require>:29:in `require'
>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/
That error is coming from Cucumber. What versions of everything are
you working with?
> On Sep 17, 2010, at 1:23 PM, Brennon Bortz <bre...@brennonbortz.com> wrote:
>
>> On 14 Sep 2010, at 22:41, Brennon Bortz wrote:
>>
>>> On 27 Aug 2010, at 15:20, David Chelimsky wrote:
>>>
>>>>
>>>> On Aug 27, 2010, at 8:48 AM, Brennon Bortz wrote:
>>>>
>>>>> On 27 Aug 2010, at 14:44, David Chelimsky wrote:
>>>>>
>>>>>> On Aug 27, 2010, at 8:37 AM, Brennon Bortz wrote:
>>>>>>
>>>>>>> On 27 Aug 2010, at 14:29, Brennon Bortz wrote:
>>>>>>>
>>>>>>>> On 27 Aug 2010, at 14:06, David Chelimsky wrote:
>>>>>>>>
>>>>>>>>> On Aug 27, 2010, at 6:47 AM, Brennon Bortz wrote:
>>>>>>>>>
>>>>>>>>>> Not sure what I must have bumped, but autotest won't run any specs--only features. No errors are given on startup. I've taken "export AUTOFEATURE=true" out of my ./bashrc file--now I just get a blank screen when running autotest. Adding "export RSPEC=true" to .bashrc doesn't change anything either.
>>>>>>>>>
>>>>>>>>> 1. Get rid of 'Autotest.add_discovery { "rails" }' from ./autotest/discover.rb.
>>>>>>>>> 2. Add autotest-rails to the Gemfile.
>>>>>>>>>
>>>>>>>>> If any of the gems listed in the Gemfile have :path or :git options, you need to run "bundle exec autotest".
>>>>>>>>>
>>>>>>>>> HTH,
>>>>>>>>> DavidStrange...that does work, but now autotest seems caught in an infinite loop. When I run autospec, the specs run, then the features, then the features again...and again...and again...and so on. If I run autotest as follows: "AUTOFEATURE=false autotest", I don't have the problem. Any other ideas?
>>>>>>> And now (I haven't touched anything...seriously!), even "AUTOFEATURE=false autotest" gives me an endless loop of spec tests...
>>>>>>
>>>>>> (I moved your posts to the bottom so we can read them in order. Please post at the bottom or inline.)
>>>>>>
>>>>>> I've seen this happen when files are generated during a spec run. What's in spec/spec.opts and cucumber.yml?
>>>>>
>>>>> No spec.opts file, and just the default cucumber.yml file (I believe):
>>>>>
>>>>> <%
>>>>> rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
>>>>> rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
>>>>> std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags ~@wip"
>>>>> %>
>>>>> default: <%= std_opts %> features
>>>>> wip: --tags @wip:3 --wip features
>>>>> rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
>>>>
>>>> Unless you're running cucumber with --profile rerun, this shouldn't be a problem.
>>>>
>>>> Do any of your specs generate files? Also, did you try both "autotest" and "bundle exec autotest" with the same results?
>>>
>>> Argh...this problem stopped occurring--thought I wouldn't have to deal with it again. Same setup as we've already discussed--just a loop of cucumber features. Specs are run, but only once when a file is changed, and then it's back to the features loop. I've tried both "autotest" and "bundle exec autotest". "autotest" gives me the behaviour I've described. "bundle exec autotest" yields the following error:
>>>
>>> <internal:lib/rubygems/custom_require>:29: warning: loading in progress, circular require considered harmful - /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/setup.rb:1:in `<top (required)>'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:2:in `<top (required)>'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:1136:in `<top (required)>'
>>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:968:in `load_plugins'
>>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:968:in `each'
>>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:976:in `block in load_plugins'
>>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:976:in `load'
>>> from /Users/brennon/.rvm/gems/ruby-1.9.2-p0@stan/gems/hanna-0.1.12/lib/rubygems_plugin.rb:2:in `<top (required)>'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/doc_manager.rb:8:in `<top (required)>'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> from <internal:lib/rubygems/custom_require>:29:in `require'
>>> /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:84: warning: method redefined; discarding old gem
>>> /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:81: warning: previous definition of gem was here
>>> /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:116: warning: method redefined; discarding old from_gems_in
>>> /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/source_index.rb:75: warning: previous definition of from_gems_in was here
>>> /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:125: warning: method redefined; discarding old refresh
>>> /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:728: warning: previous definition of refresh was here
>>> /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:126: warning: method redefined; discarding old bin_path
>>> /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:323: warning: previous definition of bin_path was here
>>> /Users/brennon/.rvm/gems/ruby-1.9.2-p0@stan/gems/autotest-4.3.2/lib/autotest.rb:275: warning: (...) interpreted as grouped expression
>>> loading autotest/cucumber_rails
>>> Error loading Autotest style autotest/cucumber_rails (no such file to load -- autotest/rails). Aborting.
>>>
>>> Any ideas? Thanks!
>>
>> Anyone have any ideas? I'm dyin' without autotest here... :(
>
> That error is coming from Cucumber. What versions of everything are you working with?
Hi, Dave--thanks for the response. I'm using:
* autotest (4.3.2)
* autotest-growl (0.2.4)
* cucumber (0.8.5)
* cucumber-rails (0.3.2)
* rspec (2.0.0.beta.20)
* rspec-core (2.0.0.beta.20)
* rspec-expectations (2.0.0.beta.20)
* rspec-mocks (2.0.0.beta.20)
* rspec-rails (2.0.0.beta.20)
Thanks, again.
Turns out that uninstalling ZenTest, autotest (shouldn't there be a conflict between these two?), autotest-rails, autotest-growl, cucumber-rails, and re-"bundle install"ing fixed the problem. No cucumber errors on "bundle exec autotest", and RSpec specs are now picked up when using either "bundle exec autotest", or just plain ol' "autotest".
Well that must be satisfying and frustrating at the same time :)
Glad you got it working.
Cheers,
David