【发布时间】:2011-06-27 06:54:33
【问题描述】:
我有一个使用 ajax 提交的表单。
这一切都有效。
这里是控制器:
def create_bp
@user = User.new(params[:user])
respond_to do |format|
if @user.save
flash[:success] = "Your friend's details have been saved."
#format.html { render :template => 'pages/home'}
format.js { render :action => "success" }
else
format.html { render :template => 'pages/home'}
format.js { render :action => "failure" }
end
end
end
这是 user_controller_spec 测试:
it "should show the correct flash message" do
xhr :post, :create_bp, :user => @attr
flash[:success].should =~ /Your friend's details have been saved./i
end
这是测试失败时给出的信息:
1) UsersController Ajax 'create_bp' success should show the correct flash message
Failure/Error: flash[:success].should =~ /Your friend's details have been saved./i
expected: /Your friend's details have been saved./i
got: nil (using =~)
# ./spec/controllers/user_controller_spec.rb:77:in `block (4 levels) in <top (required)>'
The flash message is being created and I can see it on the page as well.
如果我在控制器中设置 flash[:success] 为什么它会说它为零?
【问题讨论】:
-
您确定
@user.save正在返回 true 吗?可能验证失败。 -
不确定,但由于您正在测试您的控制器,这是您想要添加 render_views 的情况吗?请参阅:stackoverflow.com/questions/9027518/… 另一种选择是使用水豚和黄瓜恕我直言测试这种更高级别的行为。
-
在检查消息之前检查保存是否有效。这会让你生活得更轻松。
标签: ruby-on-rails-3 rspec