在Rspec集成测试中设置对象的会话

时间:2011-07-06 11:16:23

标签: ruby-on-rails-3 integration-testing rspec2

我的控制器中有以下内容:

def create
    @board = Board.find(session[:board])
    @greeting = @board.Greetings.build(params[:greeting])
    respond_to do |format|
      if @greeting.save
         format.js   { render :action => "success" }
      else
        format.js    { render :action => "failure" }
      end
    end
  end

在我的rspec selenium测试中,我想为电路板设置会话。但似乎我不能

  describe "greeting creation" do

     before(:each) do
        @board = Factory(:board)
        session[:board] = @board.id
      end

这会出现以下错误:

  Failure/Error: session[:board] = @board.id
     NoMethodError:
       undefined method `session' for nil:NilClass

如何设置会话以使此测试有效?

2 个答案:

答案 0 :(得分:1)

我遇到了这个问题,并通过使用ApplicationController.session [:key]来解决它。

但现在我收到错误TypeError: can't convert Symbol into Integer level_spec.rb:7:in [] ='`

答案 1 :(得分:0)

你确定正确调用夹具吗?它们通常是复数,如factories(:board)

您可以尝试在测试中明确设置它,看看您是否可以设置会话,而不是尝试从夹具加载。如果可以,那么你知道问题在于加载夹具。