Ruby on rails RSpec:为什么';我不让工作,但在(每个人)工作之前?
我有当前的规范:Ruby on rails RSpec:为什么';我不让工作,但在(每个人)工作之前?,ruby-on-rails,ruby,ruby-on-rails-3,rspec,rspec2,Ruby On Rails,Ruby,Ruby On Rails 3,Rspec,Rspec2,我有当前的规范: describe "DELETE 'destroy'" do let(:client) { create(:client) } #before(:each) do #@client = create(:client) #end it "should delete a client" do expect { delete :destroy, :id => client }.to change(Client, :coun
describe "DELETE 'destroy'" do
let(:client) { create(:client) }
#before(:each) do
#@client = create(:client)
#end
it "should delete a client" do
expect {
delete :destroy, :id => client
}.to change(Client, :count).by(-1)
end
# ...
end
当我使用let
时,该示例失败,但在(:each)之前使用时效果良好
以下是实现代码:
def destroy
client = Client.find(params[:id])
if client.destroy
flash[:success] = "Client deleted successfully"
redirect_to kong_clients_url
else
flash[:error] = "Client not deleted for some reason"
redirect_to kong_clients_url
end
end
那么,为什么我使用let时示例失败了 让
进行延迟计算,在访问expect/lambda(+1)中的客户端
属性之前不会创建记录,但随后会立即将其删除(-1),因此总体上在期望值内计数不会改变
你可以使用let代码>强制它立即进行评估:
let!(:client) { create(:client) }