测试控制器时禁用渲染

时间:2009-05-07 17:36:34

标签: ruby-on-rails tdd rspec shoulda

我正在使用带有shoulda的Test :: Unit来测试控制器。

因为我只是在测试控制器,所以我不想要渲染视图。

我正在对某些对象进行存根,在渲染视图时会抛出一些错误,但测试不应该失败,因为控制器是正确的。

那么,有什么方法可以禁止从我的测试中渲染模板/视图?

我听说rSpec就是这样的。

2 个答案:

答案 0 :(得分:6)

如果您使用的是Mocha,那很简单。将其添加到您的个人测试或设置方法中:

@controller.expects(:render)

如果你不是,那么,使用摩卡。

gem install mocha

然后在你的test_helper.rb

require 'mocha'

答案 1 :(得分:-1)

您不应该在测试中看到任何视图。你能发布失败的测试代码吗?控制器(功能)测试应该只检查调用操作时发生的特定操作。即它应检查它是否呈现正确的视图或重定向到不同的操作。您还可以检查视图的flash或其他变量的设置。这是您正在测试的类型吗?

以下是使用从shoulda docs获取的get请求测试show动作的一个很好的示例:

class UsersControllerTest < Test::Unit::TestCase
  context "on GET to :show" do
    setup { get :show, :id => 1 }

    should_assign_to :user
    should_respond_with :success
    should_render_template :show
    should_not_set_the_flash

    should "do something else really cool" do
      assert_equal 1, assigns(:user).id
    end
  end
end

也许看看rails guides这也很不错。