2

我正在使用 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. 

并在方法模拟之前从规范中启动调试会话,我得到以下信息:

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

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

4

4 回答 4

3

尝试使用@controller 而不是控制器

于 2009-05-27T16:53:34.047 回答
2

删除之前块中的 :all 可以解决问题。不过不知道为什么。

before do
...
end

是你需要的。

于 2009-06-12T02:19:16.390 回答
1

如果您需要controller在一个before(:all)块中,请调用setup_controller_request_and_response.

于 2012-01-02T04:34:04.497 回答
0

PS:这个行为应该在最新版本的 RSpec 中得到修复。

请参阅 RSpec v.2.14 中的运行示例

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
于 2013-09-17T05:50:25.323 回答