So here''s the deal. Was using rack-test in rspec, cause I like passing paths instead of an action name, but it doesn''t have access to the session, flash, cookies, etc. So I tried to switch to normal rspec and here''s what I get (gist is working for me, so just pasting here) # error 1) NoMethodError in ''PagesController should get the home page'' undefined method `get'' for #<ActiveSupport::TestCase::Subclass_1:0x401648c> ./spec/functional/public/pages_controller_spec.rb:5: # spec require File.join(File.dirname(__FILE__),''..'',''..'',''spec_helper'') describe PagesController do it "should get the home page" do get ''home'' response.should be_redirect end end # controller class PagesController < ApplicationController def home render :layout => false end end # spec_helper.rb require ''rubygems'' require ''spork'' Spork.prefork do # Loading more in this block will cause your tests to run faster. However, # if you change any configuration or code from libraries loaded here, you''ll # need to restart spork for it take effect. ENV["RAILS_ENV"] ||= ''test'' require File.dirname(__FILE__) + "/../config/environment" require ''spec/autorun'' require ''spec/rails'' require ''faker'' require ''nokogiri'' Spec::Runner.configure do |config| config.before(:all) do DataMapper.auto_migrate! ActionMailer::Base.delivery_method = :test ActionMailer::Base.perform_deliveries = true ActionMailer::Base.deliveries = [] end config.before do @time_now = Time.now Time.stub!(:now).and_return(@time_now) def emails; ActionMailer::Base.deliveries end emails.clear repository do |r| transaction = DataMapper::Transaction.new(r) transaction.begin r.adapter.push_transaction(transaction) end end config.after do repository do |r| adapter = r.adapter while adapter.current_transaction adapter.current_transaction.rollback adapter.pop_transaction end end end end end Spork.each_run do # This code will be run each time you run your specs. Dir[File.dirname(__FILE__) + ''/helpers/*.rb''].each{|helper| require helper} require File.dirname(__FILE__) / ''fixtures'' end
On Oct 29, 2009, at 6:04 PM, BrianTheCoder wrote:> So here''s the deal. Was using rack-test in rspec, cause I like passing > paths instead of an action name, but it doesn''t have access to the > session, flash, cookies, etc. So I tried to switch to normal rspec and > here''s what I get (gist is working for me, so just pasting here) > > # error > > 1) > NoMethodError in ''PagesController should get the home page'' > undefined method `get'' for > #<ActiveSupport::TestCase::Subclass_1:0x401648c> > ./spec/functional/public/pages_controller_spec.rb:5:For rspec to know that you''re writing a controller spec and provide the services you''re looking for (like the get() method), you need one of two conditions: 1. the file lives in the ./spec/controllers/ directory or any of its subdirectories 2. explicit declaration: describe PagesController, :type => :controller do ... end HTH, David> > # spec > > require File.join(File.dirname(__FILE__),''..'',''..'',''spec_helper'') > > describe PagesController do > it "should get the home page" do > get ''home'' > response.should be_redirect > end > end > > # controller > > class PagesController < ApplicationController > def home > render :layout => false > end > end > > # spec_helper.rb > > require ''rubygems'' > require ''spork'' > > Spork.prefork do > # Loading more in this block will cause your tests to run faster. > However, > # if you change any configuration or code from libraries loaded > here, you''ll > # need to restart spork for it take effect. > ENV["RAILS_ENV"] ||= ''test'' > require File.dirname(__FILE__) + "/../config/environment" > require ''spec/autorun'' > require ''spec/rails'' > require ''faker'' > require ''nokogiri'' > > Spec::Runner.configure do |config| > config.before(:all) do > DataMapper.auto_migrate! > ActionMailer::Base.delivery_method = :test > ActionMailer::Base.perform_deliveries = true > ActionMailer::Base.deliveries = [] > > end > > config.before do > @time_now = Time.now > Time.stub!(:now).and_return(@time_now) > > def emails; ActionMailer::Base.deliveries end > > emails.clear > > repository do |r| > transaction = DataMapper::Transaction.new(r) > transaction.begin > r.adapter.push_transaction(transaction) > end > end > > config.after do > repository do |r| > adapter = r.adapter > while adapter.current_transaction > adapter.current_transaction.rollback > adapter.pop_transaction > end > end > end > end > > end > > Spork.each_run do > # This code will be run each time you run your specs. > Dir[File.dirname(__FILE__) + ''/helpers/*.rb''].each{|helper| require > helper} > require File.dirname(__FILE__) / ''fixtures'' > end > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-usersCheers, David
Thanks. I ended up just instantiating the rails integration session and operating off of that. Not the prettiest, but it does what I want it to. Also apparently the ActionController::Response breaks some methods that work on Rack::Response, go rails! *sarcasm* On Oct 31, 8:43?am, David Chelimsky <dchelim... at .com> wrote:> On Oct 29, 2009, at 6:04 PM, BrianTheCoder wrote: > > > So here''s the deal. Was using rack-test in rspec, cause I like passing > > paths instead of an action name, but it doesn''t have access to the > > session, flash, cookies, etc. So I tried to switch to normal rspec and > > here''s what I get (gist is working for me, so just pasting here) > > > # error > > > 1) > > NoMethodError in ''PagesController should get the home page'' > > undefined method `get'' for > > #<ActiveSupport::TestCase::Subclass_1:0x401648c> > > ./spec/functional/public/pages_controller_spec.rb:5: > > For rspec to know that you''re writing a controller spec and provide ? > the services you''re looking for (like the get() method), you need one ? > of two conditions: > > 1. the file lives in the ./spec/controllers/ directory or any of its ? > subdirectories > > 2. explicit declaration: > > describe PagesController, :type => :controller do > ? ?... > end > > HTH, > David > > > > > > > > > # spec > > > require File.join(File.dirname(__FILE__),''..'',''..'',''spec_helper'') > > > describe PagesController do > > ?it "should get the home page" do > > ? ?get ''home'' > > ? ?response.should be_redirect > > ?end > > end > > > # controller > > > class PagesController < ApplicationController > > ?def home > > ? ?render :layout => false > > ?end > > end > > > # spec_helper.rb > > > require ''rubygems'' > > require ''spork'' > > > Spork.prefork do > > ?# Loading more in this block will cause your tests to run faster. > > However, > > ?# if you change any configuration or code from libraries loaded > > here, you''ll > > ?# need to restart spork for it take effect. > > ?ENV["RAILS_ENV"] ||= ''test'' > > ?require File.dirname(__FILE__) + "/../config/environment" > > ?require ''spec/autorun'' > > ?require ''spec/rails'' > > ?require ''faker'' > > ?require ''nokogiri'' > > > ?Spec::Runner.configure do |config| > > ? ?config.before(:all) do > > ? ? ?DataMapper.auto_migrate! > > ? ? ?ActionMailer::Base.delivery_method = :test > > ? ? ?ActionMailer::Base.perform_deliveries = true > > ? ? ?ActionMailer::Base.deliveries = [] > > > ? ?end > > > ? ?config.before do > > ? ? ?@time_now = Time.now > > ? ? ?Time.stub!(:now).and_return(@time_now) > > > ? ? ?def emails; ActionMailer::Base.deliveries end > > > ? ? ?emails.clear > > > ? ? ?repository do |r| > > ? ? ? ?transaction = DataMapper::Transaction.new(r) > > ? ? ? ?transaction.begin > > ? ? ? ?r.adapter.push_transaction(transaction) > > ? ? ?end > > ? ?end > > > ? ?config.after do > > ? ? ?repository do |r| > > ? ? ? ?adapter = r.adapter > > ? ? ? ?while adapter.current_transaction > > ? ? ? ? ?adapter.current_transaction.rollback > > ? ? ? ? ?adapter.pop_transaction > > ? ? ? ?end > > ? ? ?end > > ? ?end > > ?end > > > end > > > Spork.each_run do > > ?# This code will be run each time you run your specs. > > ?Dir[File.dirname(__FILE__) + ''/helpers/*.rb''].each{|helper| require > > helper} > > ?require File.dirname(__FILE__) / ''fixtures'' > > end > > _______________________________________________ > > rspec-users mailing list > > rspec-us... at rubyforge.org > >http://rubyforge.org/mailman/listinfo/rspec-users > > Cheers, > David > > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users