When using context() inside an ActionController::TestCase, I get the following error:
RuntimeError: @controller is nil: make sure you set it in your test's setup method.
Here is an example of what my test file looks like:
class ExamplesControllerTest < ActionController::TestCase
context "index action" do
should "return a list of examples" do
get :index, :format => :json
The error is happening because context() creates a new Test::Unit::TestCase derived class whose name does not contain "ExamplesController", and so Rails becomes confused when it tries to automatically set @controller inside of the context() body.
Thanks for your consideration.
A workaround / solution is to assign @controller an instance of the controller you're testing in a block passed to setup().
Is this gem so awesome, that no one maintains it anymore?
It is indeed disheartening, @retr0h. There is always opportunity for improvement / increasing popularity!
I wrote the following monkeypatch to automate @robgleeson's suggestion of setting @controller as a workaround for the problem:
def self.context *args, &block
super *args do
# establish the rails controller being tested
ancestors = self.class.ancestors
test_case = ancestors[ancestors.index(ActionController::TestCase) - 1]
@controller = test_case.controller_class.new
Put that in your test/test_helper.rb and things will Just Work. Cheers.