On Sat, Jan 15, 2011 at 9:40 PM, Lille [email protected] wrote:
I guess I depart from the BDD line, because I feel that if I test a
module and I test that the host implements it when expected, then that
should be enough. For example, if I have a module whose single method
has four possible results and then I implement it in 4 hosts, I might
have to have as much as 16 tests versus my approach’s 8,
alternatively.
(snip)
Of course, it seems like testing the invocations of the module has no
facility in RSpec, due, perhaps, to the BDD approach, which, I allow,
I may come to see as wiser, with more experience.
RSpec provides easy access to message expectations for things like that.
In the case of a single module included in several places, I would
probably specify the behavior in one place (either directly against
the model, or using a fake wrapper if necessary), and then use a
message expectation to check that you’ve hooked everything up. E.g.:
require ‘spec_helper’
class FilterTesterController < ApplicationController
before_filter :some_filter, :only => [:wrap_some_filter]
def wrap_some_filter
# whatever
end
end
describe FilterTesterController, “#some_filter” do
before(:each) do
MyApp::Application.routes.draw do
get :wrap_some_filter, :to => ‘filter_tester#wrap_some_filter’,
:as => ‘originating’
end
end
after(:each) do
MyApp::Application.reload_routes!
end
it “does what I expect it to” do
get :wrap_some_filter
# expectation
end
end
describe “One or all of your other classes that include the module” do
it “is hooked up” do
YourModule.should_receive(:the_method).with :some_params
get :some_action # or YourClass.new.some_method or whatever
end
end
Cheers,
Katrina