我有当前规范:
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
时该示例失败,但当我使用 before(: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 时示例会失败?!
最佳答案
let
是延迟求值的,直到您访问 expect/lambda (+1) 中的 client
属性才会创建记录,但随后它会立即被删除(-1),所以总的来说在期望值内计数不会改变。
您可以使用 let!
强制它立即求值:
let!(:client) { create(:client) }
关于ruby-on-rails - RSpec:为什么不让 work 而 before(:each) 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237763/