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?