为什么我在测试控制器时无法访问RSpec中的控制器对象?

时间:2009-05-27 14:45:18

标签: ruby-on-rails ruby rspec ruby-on-rails-plugins

我正在使用rspec-rails,版本1.2.6。在控制器测试中

describe WebsController do ...

我似乎无法访问控制器对象以便存根方法。例如,以下内容不起作用:

  before :all do
    @feed = mock_model(Feed)
    controller.should_receive(:feed_from_params).and_return @feed    
  end

我收到像

这样的警告
An expectation of :feed_from_params was set on nil. 

并从方法模拟之前的行上的spec发出一个调试会话,我得到以下内容:

(rdb:1) self.respond_to? :controller
true
(rdb:1) controller
nil

从所有示例中,访问控制器变量应该有效,但事实并非如此。是什么赋予了?如何在被测控制器中模拟或存根方法?

4 个答案:

答案 0 :(得分:3)

尝试使用@controller而非控制器

答案 1 :(得分:2)

删除:before块中的all修复了该问题。不过不确定原因。

before do
...
end

是你需要的。

答案 2 :(得分:1)

如果controller区块中需要before(:all),请致电setup_controller_request_and_response

答案 3 :(得分:0)

PS:此行为应在最新版本的RSpec中修复。

请参阅RSpec v.2.14中的running example

require "spec_helper"

RSpec.configure {|c| c.before { expect(controller).not_to be_nil }}

describe WidgetsController do
  describe "GET index" do
    it "doesn't matter" do
    end
  end
end