1
我决定写一些请求规格,除了我的黄瓜方案。但是失败了我的第一个例子:Rails请求规范不提出请求
所以在我goalsController这个put方法:
def achieve
@goal.update_attribute(:achieved, true)
redirect_to :back
end
这是例子:
# -*- coding: utf-8 -*-
require 'spec_helper'
describe "Achievements" do
before(:all) do
@bob = Factory(:user, :email => "[email protected]", :password => "qweqwe", :password_confirmation => "qweqwe", :money => 500)
@achieve = Factory(:goal, :user => @bob, :title => "Notebook", :price => 100, :achieved => false)
login_user('[email protected]', 'qweqwe')
end
it 'can not be achieved twice' do
visit dashboard_path
put achieve_user_goal_path(@bob, @achieve) #Passes it well
@achieve.reload #same with or without this line
@achieve.achieved.should equal true #Fails
end
end
所以之后“实现”把请求字段为真。它在我的应用程序中完美工作,并在黄瓜步骤中完成,但不在此rspec示例中。这就像rspec只是忽略了'put'一致。
我想测试一切工作正常,如果用户试图再次请求这一点。例如,如果他打开两个相同的页面,并尝试点击两者上的“实现”。 –
我没有从你的问题得到这个;就我所知,测试竞态条件并不是很容易,但如果您不需要同时执行这些请求,只需点击路径并单击按钮两次。 – d11wtq
在下一次访问此路径时不会出现此按钮,因为目标已实现。但是,如果较早的用户打开另一个页面,则它将具有此按钮,并且用户将能够再次点击它。我的代码已经安全的这种行为(我插入不是所有的代码#achieve行动),我只是想要测试与请求规格:) –