0
私はユーザーが投稿を作成/削除できるようにするテストアプリケーションを構築しています。私はデバッグするのが難しいと思っている破壊アクションにバグがあります。ここに私のテストです:私はアクションでデバッガを入れて、ポストが見つかり、正常に削除されたように見えるので、私は問題がである疑いがあるRSpecコントローラ破棄テスト
def destroy
@post = Post.find_by(id: params[:id])
if @post
@post.destroy
else
flash[:errors] = "Post doesn't exist"
end
render :index
end
:
describe '#destroy' do
context 'existing post' do
let (:post) { FactoryGirl.create(:post) }
it 'removes post from table' do
expect { delete :destroy, id: post }.to change { Post.count }.by(-1)
end
it 'renders index template' do
delete :destroy, id: post
expect(response).to render_template('index')
end
end
context 'delete a non-existent post' do
it 'creates an error message' do
delete :destroy, id: 10000
expect(flash[:errors]).to include("Post doesn't exist")
end
end
end
は、ここに私の行動を破壊します私はテストを評価している。ここに私の失敗仕様があります:
1) PostsController#destroy existing post removes post from table
Failure/Error: expect { delete :destroy, id: post }.to change { Post.count }.by(-1)
expected result to have changed by -1, but was changed by 0
ここでは何が起こっていますか?
私はそれを理解しましょう!遅延ロードの代わりに各例の前に作成を強制します。しかし、私のテストでは「post」メソッドを呼び出したときにメソッドを呼び出す必要があります。それで、それは作成され、次に削除されません、そして、カウントは評価されますか? – Sunny