小编use*_*033的帖子

使用会话测试 Rails 控制器

在我的应用程序中,我有一个会话控制器。现在我想测试用户控制器,只有登录后才能访问该控制器。

我的问题是如何伪造会话。我已经尝试了很多,所以我希望你现在可以帮助我:

应用控制器:

   helper_method :current_user
   def authenticate_user
     current_user
     if @current_user
       return true
     else
       redirect_to(:controller => 'sessions', :action => 'new')
       return false
     end
   end

   private
     def current_user
     @current_user ||= User.find(session[:user_id]) if session[:user_id]
   end
Run Code Online (Sandbox Code Playgroud)

用户控制器具有:

before_filter :authenticate_user
Run Code Online (Sandbox Code Playgroud)

控制器测试:

describe "GET index" do
  it "assigns all users as @users" do
    user = FactoryGirl.create(:user)
    @request.session[:user_id] = user.id
    get 'users'
    expect(@users.size).to eq(1)
  end
end
Run Code Online (Sandbox Code Playgroud)

我也尝试过session[:user_id] = user.id并调试(在获取请求之后):

  • save_and_open_page 让我看到登录页面。
  • @current_user总是为零
  • User.find(session[:user_id])返回正确的用户

testing session controller rspec ruby-on-rails-4

5
推荐指数
1
解决办法
8595
查看次数

Rails 4更新has_many的Lambda表达式

我更新了我Rails的版本的应用程序Rails 3.0Rails 4.1,我已经得到了以下错误:

ArgumentError: Unknown key: :order. Valid keys are: :class_name, :class, :for...
Run Code Online (Sandbox Code Playgroud)

问题出现在以下行中:

has_many :downloads, :dependent => :destroy, :order => "downloads.position DESC"
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌研究,这条线看起来像这样:

has_many :downloads, :dependent => :destroy, -> {order('downloads.position DESC')}
Run Code Online (Sandbox Code Playgroud)

现在我得到了错误:

syntax error, unexpected '\n', expecting tASSOC
Run Code Online (Sandbox Code Playgroud)

我也尝试了其他变化,但没有任何效果.我希望你能帮助我.

lambda ruby-on-rails has-many ruby-on-rails-4.1

1
推荐指数
1
解决办法
1305
查看次数