0
以下规范失败并重新执行。我已经尝试了一切,但无法让它工作。如果我手动测试它看起来很好:(一些帮助/提示将非常好!为什么水豚/ rspec会失去current_user?
如果他/她拥有正确的令牌(在URL中),加入操作应该将已登录的用户添加到公会/ )如果用户没有登录,动作将重定向到登录页面,并将令牌和ID保存到cookie。登录后,如果cookie被设置,用户将被重定向到加入页面
I'我发现在测试过程中current_user会丢失,会话变量仍然存在,我有一个标准的Authlogic设置,所有其他测试都通过了,所以我真的不知道发生了什么问题,我是RSpec /水豚,但黄瓜/水豚测试(我从中迁徙)也失败了,所以我认为这是水豚问题。
失败规格:
describe GuildsController do
fixtures :roles
def login
@user = Factory(:User)
visit login_path
fill_in 'Login', :with => @user.login
fill_in 'Password', :with => 'password'
click 'Login'
page.should have_css(".notice")
end
def assing_user_to_guild_as(role)
role_id = Role.where(:name => role).first.id
@guild.assignments << Assignment.new(:role_id => role_id, :user_id => @user.id, :guild_id => @guild.id)
end
before(:each) do
@guild = Guild.first || Factory(:Guild).build
visit root_path
end
context "a user" do
before(:each) do
login
end
it "should be able to join a guild with a valid token" do
visit "guilds/#{@guild.id}/join/#{@guild.token}"
@guild.members.include?(@user.login).should be_true
page.should have_css(".notice")
end
it "shouldn't be able to join a guild with a invalid token" do
visit "guilds/#{@guild.id}/join/#{@guild.token+"invalid"}"
@guild.members.include?(@user.login).should be_false
page.should have_css(".error")
end
end
end
控制器动作:
def join
@guild = Guild.find(params[:id])
respond_to do |format|
if current_user.nil?
flash[:error] = t("have_to_be_logged_in")
unless params[:token].nil?
cookies[:rguilds_jg_token] = params[:token]
cookies[:rguilds_jg_gid] = params[:id]
end
format.html { redirect_to(login_path) }
else
unless cookies[:rguilds_jg_token].nil? && cookies[:rguilds_jg_gid].nil?
cookies.delete(:rguilds_jg_token)
cookies.delete(:rguilds_jg_gid)
end
if @guild.verified?
if params[:token] == @guild.token
unless @guild.users.include?(current_user)
@guild.assignments << Assignment.create(:user_id => current_user.id, :role_id => Role.find_by_name("member").id)
flash[:notice] = t('guilds.joined')
format.html { redirect_to(@guild) }
else
flash[:error] = t('guilds.already_joined')
format.html { redirect_to(@guild) }
end
else
flash[:error] = t('guilds.invalid_token')
format.html { redirect_to(@guild) }
end
else
flash[:error] = t('guilds.not_verified')
format.html { redirect_to(@guild) }
end
end
end
end
“耙规范” 的结果:
...................FF.....................................................................
Failures:
1) GuildsController a user should be able to join a guild with a valid token
Failure/Error: @guild.members.include?(@user.login).should be_true
expected false to be true
# ./spec/integration/guilds_spec.rb:72:in `block (3 levels) in <top (required)>'
2) GuildsController a user shouldn't be able to join a guild with a invalid token
Failure/Error: page.should have_css(".error")
expected #has_css?(".error") to return true, got false
# ./spec/integration/guilds_spec.rb:79:in `block (3 levels) in <top (required)>'
Finished in 7.87 seconds
90 examples, 2 failures
宝石:
gem 'rails', '3.0.0.rc'
gem "mocha"
gem "rspec-rails", ">= 2.0.0.beta.19"
gem "factory_girl_rails"
gem 'capybara'
gem "authlogic", :git => "http://github.com/odorcicd/authlogic.git", :branch => "rails3"
谢谢你这个答案,但问题仍然存在。 – RD010 2010-09-30 08:17:13
我试过但不行。作为实例,在使用水豚方法登录后,current_user在控制器中为零,你记得RedDragon是如何修复它的? – 2012-01-09 14:41:44