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) }