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.)

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs