【发布时间】:2020-11-07 06:32:22
【问题描述】:
我有一个具有以下操作的图书控制器...
def destroy
@book = Book.find(params[:id])
if @book.destroy
redirect_to(books_path)
else
render('delete')
end
end
我可以测试第一个 if 情况,但不能测试 @book.destroy 返回 false 的情况。我的问题是 - 我如何让 @book.destroy 失败?我想编写一个 rspec 测试来涵盖这种情况。
describe "destroy" do
before(:context) do
@book = create(:book)
end
context "failing the destroy function" do
it "renders delete" do
allow(@book).to receive(:destroy).and_return(false)
delete :destroy, params: { id: @book.id }
expect(response).to render_template(:delete)
end
end
end
我尝试编写上述想法,即 allow(@book).to receive(:destroy).and_return(true) 会使 destroy() 返回 false,但它仍然返回 true 并在第一个 if 中测试代码陈述。我不知道如何覆盖 else 语句中的代码。请问有什么帮助吗?
谢谢。
【问题讨论】:
-
不应该是
.and_return(false)?
标签: ruby-on-rails rspec