How to write tests for missing 'require' in the Rails core?

When hacking on rails 3 I have discovered some missing requires. For example, when I wanted to use ActionDispatch::Integration::Session, it get an error because Test::Unit::Assertions is used but 'test/unit/ assertions' is not required.

So I have tried to build a patch for this situation. Well actually, the creation of the patch is simple, but how do you test (with test/ unit) that we can use this class without requiring its dependency 'test/unit/assertions'? To have a real test case I would need an isolated environment which would require the class, but would not require any other dependency. One thing that is hard, is that the rails test suite itself already loads a lot of necessary dependencies which would make it hard to write a failing test for these cases (see 'abstract_unit' in actionpack/lib/test).

Anyhow, when I wrote a first test case I got a chain of dependency issues so I think it is worth to investigate this, but I can't really think of a way to include it in the current test suite.

Any suggestions?


This is actually what the Isolated test case is for. You’ll see that we use it extensively in Railties specifically to isolate tests from added dependencies.

Yehuda Katz Developer | Engine Yard

(ph) 718.877.1325

Thanks for pointing me to that file. I guess I should use require "activesupport/lib/active_support/testing/isolation" and use railties/ test/isolation/abstract_unit.rb as an example.

I was thinking of creating the file actionpack/test/dependency_test.rb that will test all dependencies for actionpack. This file would have tests like:

test "require ActionDispatch::Integration::Session" do   require 'action_dispatch/testing/integration'   ActionDispatch::Integration::Session end

Do you think that's the way to go?


I think a better approach would be testing each module in isolation for its intended purpose. So in other words, try JUST pulling in Rendering into a Metal and see that it actually can support all the rendering cases in the Rendering module.

Yehuda Katz Developer | Engine Yard (ph) 718.877.1325

I was starting on a fix to

and had looked at the to_json code in 2.3.3, 2.3.4, 2.3.5 and 3.0.0beta1. It seems that the json functionality is migrating from ActiveRecord to ActiveModel in rails 3 and I am having a hard time understanding how I should patch 2.3.5 to work when 3.0.0beta1 is changing the json functionality. I have code that works for my application locally but still need to find the right place to put this patch in 2.3.5.

This will be my first contribution to rails and I need a little mentoring. Anyone out there been working on the json stuff?

Thanks Gregg