Leslie Freeman
2008-Jul-31 19:02 UTC
[rspec-users] Writing specs for a plugin module for ActionController
Hello, I''m trying to spec a plugin that includes a module that adds functionality to ActionController below is what I''ve come up with: # vendor/plugins/custom_attribute_fu/spec/active_record_spec.rb require File.dirname(__FILE__) + ''/spec_helper'' class TestPerson < ActiveRecord::Base end class TestPeopleController < ActionController::Base #calling defines_custom_attributes should add the custom_attribute_definitions method, I''ve defined it explicitly for now to just get the tests running #defines_custom_attributes def custom_attribute_definitions end end describe TestPeopleController do describe "handling GET /custom_attribute_definitions" do before(:each) do @controller = TestPeopleController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new end def do_get get :custom_attribute_definitions end it "should be successful" do do_get response.should be_success end end end When I run the spec I get: 1) ActionView::TemplateError in ''TestPeopleController handling GET / custom_attribute_definitions should be successful'' undefined method `custom_attribute_definitions'' for TestPerson(id: integer, name: string):Class What I don''t understand is that why get :custom_attribute_definitions is trying to call that method on TestPerson rather than TestPersonController. I''m sure there''s a better way to set this up - any advice would be greatly appreciated! Les
David Chelimsky
2008-Aug-06 03:41 UTC
[rspec-users] Writing specs for a plugin module for ActionController
On Thu, Jul 31, 2008 at 2:02 PM, Leslie Freeman <lesliefreeman3 at gmail.com> wrote:> Hello, > I''m trying to spec a plugin that includes a module that adds functionality > to ActionController below is what I''ve come up with: > > # vendor/plugins/custom_attribute_fu/spec/active_record_spec.rb > require File.dirname(__FILE__) + ''/spec_helper'' > > class TestPerson < ActiveRecord::Base > end > > class TestPeopleController < ActionController::Base > #calling defines_custom_attributes should add the > custom_attribute_definitions method, I''ve defined it explicitly for now to > just get the tests running > #defines_custom_attributes > > def custom_attribute_definitions > end > end > > describe TestPeopleController do > > describe "handling GET /custom_attribute_definitions" do > > before(:each) do > @controller = TestPeopleController.new > @request = ActionController::TestRequest.new > @response = ActionController::TestResponse.new > end > > def do_get > get :custom_attribute_definitions > end > > it "should be successful" do > do_get > response.should be_success > end > > end > end > > When I run the spec I get: > > 1) > ActionView::TemplateError in ''TestPeopleController handling GET > /custom_attribute_definitions should be successful'' > undefined method `custom_attribute_definitions'' for TestPerson(id: integer, > name: string):Class > > What I don''t understand is that why get :custom_attribute_definitions is > trying to call that method on TestPerson rather than TestPersonController. > > I''m sure there''s a better way to set this up - any advice would be greatly > appreciated!I get a very different result. Here''s what I did: $ rails foo $ cd foo $ script/plugin install git://github.com/dchelimsky/rspec.git $ script/plugin install git://github.com/dchelimsky/rspec-rails.git $ script/generate rspec $ mkdir vendor/plugins/custom_attribute_fu $ mkdir vendor/plugins/custom_attribute_fu/spec $ touch vendor/plugins/custom_attribute_fu/spec/spec_helper.rb $ touch vendor/plugins/custom_attribute_fu/spec/active_record_spec.rb Then I added the text you posted above to active_record_spec.rb and the following to spec_helper.rb: require File.join(File.dirname(__FILE__), *%w[.. .. .. .. spec spec_helper]) Then, from the RAILS_ROOT: $ rake spec:plugins F 1) ActionView::MissingTemplate in ''TestPeopleController handling GET /custom_attribute_definitions should be successful'' This is with rails 2.1 and the latest rspec (from git). Am I doing something different from what you did?