Accessing named route helper in cache sweepers

In my cache sweeper I call expire_fragment and use some named route
helpers for its argument (like comments_path(…)).

This works fine in the app, but in my tests it’s causing problems,
because there’s no controller and comments_path returns nil. (See
method_missing in actionpack/lib/action_controller/caching/sweeper.rb
– that’s what’s returning nil in this case. I don’t understand why
that’s acceptable, but whatever.)

When my tests run Comment.create() directly, the sweeper gets called,
with no controller. How can I get to comments_path in this case?

On Sun, Oct 25, 2009 at 3:15 PM, Scott J.
[email protected]wrote:

When my tests run Comment.create() directly, the sweeper gets called,
with no controller. How can I get to comments_path in this case?

I do know if the most effective way to do things because caching is
turned
off by default within the test configuration. Next, where’s the code
for
the
test(s) with issues?

-Conrad

The test is trivial. Using rspec and machinist:

In user_spec.rb:

describe User do
it “should create a new instance given valid attributes” do
User.create!(User.plan)
end
end

And in blueprints.rb:

User.blueprint do
login { Sham.name }
email { “#{self.login}@foo.com” }
password { Sham.name }
password_confirmation { password}
end

I just realized that this works when run by itself. It only breaks
when run after other specs that use controllers with the cache_sweeper
directive. (I guess that causes the sweeper to get loaded and begin
observing the models.)