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
on 2010-08-26 15:15
on 2010-08-26 15:29
On Aug 24, 2010, at 6:51 PM, Titinux wrote: > 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?
on 2010-08-27 12:38
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>
on 2010-08-27 13:54
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.
# ~/.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
brennon.bortz@casala.ie
Ph.D. Researcher & Composer - Sonic Arts Research Centre
Queen's University, Belfast
brennon@brennonbortz.com / bbortz01@qub.ac.uk
on 2010-08-27 13:56
I should point out that autotest detects changes to specs just fine and reloads accordingly--but still only gives blank output. Thanks again, Brennon Brennon Bortz Software Researcher Dundalk Institute of Technology brennon.bortz@casala.ie Ph.D. Researcher & Composer - Sonic Arts Research Centre Queen's University, Belfast brennon@brennonbortz.com / bbortz01@qub.ac.uk
on 2010-08-27 15:08
On Aug 27, 2010, at 6:47 AM, Brennon Bortz wrote: > Dir['spec/**/*.rb'] > # {RAILS_ROOT}/autotest/.discover.rb > (Not running features. To run features in autotest, set AUTOFEATURE=true.) > * actionmailer (3.0.0.rc) > * cucumber-rails (0.3.2) > * polyglot (0.3.1) > * 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? 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
on 2010-08-27 15:11
On Aug 27, 2010, at 5:35 AM, Titinux wrote: > describe "GET index" do > > 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
on 2010-08-27 15:30
Strange...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? Many thanks, Brennon On 27 Aug 2010, at 14:06, David Chelimsky wrote: > David > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users Brennon Bortz Software Researcher Dundalk Institute of Technology brennon.bortz@casala.ie Ph.D. Researcher & Composer - Sonic Arts Research Centre Queen's University, Belfast brennon@brennonbortz.com / bbortz01@qub.ac.uk
on 2010-08-27 15:38
And now (I haven't touched anything...seriously!), even "AUTOFEATURE=false autotest" gives me an endless loop of spec tests... On 27 Aug 2010, at 14:29, Brennon Bortz wrote: >> >> rspec-users@rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users > > Brennon Bortz > Software Researcher > Dundalk Institute of Technology > brennon.bortz@casala.ie > Ph.D. Researcher & Composer - Sonic Arts Research Centre > Queen's University, Belfast > brennon@brennonbortz.com / bbortz01@qub.ac.uk > Brennon Bortz Software Researcher Dundalk Institute of Technology brennon.bortz@casala.ie Ph.D. Researcher & Composer - Sonic Arts Research Centre Queen's University, Belfast brennon@brennonbortz.com / bbortz01@qub.ac.uk
on 2010-08-27 15:45
On Aug 27, 2010, at 8:37 AM, Brennon Bortz wrote: >>> >>> 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?
on 2010-08-27 15:55
On 27 Aug 2010, at 14:44, David Chelimsky wrote: >>>> 1. Get rid of 'Autotest.add_discovery { "rails" }' from ./autotest/discover.rb. > 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
on 2010-08-27 16:29
On Aug 27, 2010, at 8:48 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. >> (I moved your posts to the bottom so we can read them in order. Please post at the bottom or inline.) > 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?
on 2010-08-27 23:57
This is how I do it:
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 2010-08-28 17:52
On Aug 27, 2010, at 8:06 AM, David Chelimsky wrote: >> # at.clear_mappings # take out the default (test/test*rb) >> end >> >> Gems included by the bundle: >> * capybara (0.3.9) >> * mime-types (1.16) >> * rspec-expectations (2.0.0.beta.20) >> >> This is driving me up the wall...any ideas? > > 1. Get rid of 'Autotest.add_discovery { "rails" }' from ./autotest/discover.rb. > 2. Add autotest-rails to the Gemfile. 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. HTH, David
on 2010-09-14 23:43
On 27 Aug 2010, at 15:20, David Chelimsky wrote: >>>>> >>>>>> 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? >> 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!
on 2010-09-17 19:24
On 14 Sep 2010, at 22:41, Brennon Bortz wrote: >>>>> >>>>>>> >>> <% >> Do any of your specs generate files? Also, did you try both "autotest" and "bundle exec autotest" with the same results? > from <internal:lib/rubygems/custom_require>:29:in `require' > from <internal:lib/rubygems/custom_require>:29:in `require' > 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... :(
on 2010-09-17 21:13
On Sep 17, 2010, at 1:23 PM, Brennon Bortz <brennon@brennonbortz.com> wrote: >>>>> >>>>>>>>> "export RSPEC=true" to .bashrc doesn't change anything either. >>>>>>>> in an infinite loop. When I run autospec, the specs run, >>>>> >>>> ['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" >>> >> >> bundler-1.0.0.rc.6/lib/bundler/shared_helpers.rb:2:in `<top >> rubygems.rb:976:in `block in load_plugins' >> /Users/brennon/.rvm/gems/ruby-1.9.2-p0@global/gems/bundler-1.0.0.rc. >> 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?
on 2010-09-18 12:21
On 17 Sep 2010, at 20:11, David Chelimsky wrote: >>>>> >>>>>>>>> 1. Get rid of 'Autotest.add_discovery { "rails" }' from ./autotest/discover.rb. >>>>>> I've seen this happen when files are generated during a spec run. What's in spec/spec.opts and cucumber.yml? >>>>> rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip >>> 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 /Users/brennon/.rvm/gems/ruby-1.9.2-p0@stan/gems/hanna-0.1.12/lib/rubygems_plugin.rb:2:in `<top (required)>' >>> /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:728: warning: previous definition of refresh was 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.
on 2010-09-18 12:51
On 18 Sep 2010, at 11:20, 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. >>>>>>> (I moved your posts to the bottom so we can read them in order. Please post at the bottom or inline.) >>>>>> default: <%= std_opts %> features >>>> 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:976:in `block in load_plugins' >>>> /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 >>> Anyone have any ideas? I'm dyin' without autotest here... :( > * 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".
on 2010-09-18 16:30
On Sep 18, 2010, at 5:51 AM, Brennon Bortz wrote: >>>>>> >>>>>>>>>>> On Aug 27, 2010, at 6:47 AM, Brennon Bortz wrote: >>>>>>>>> And now (I haven't touched anything...seriously!), even "AUTOFEATURE=false autotest" gives me an endless loop of spec tests... >>>>>>> std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags ~@wip" >>>>> >>>>> from /Users/brennon/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems.rb:968:in `load_plugins' >>>>> /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 >>>>> Any ideas? Thanks! >> * 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
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.