我正在尝试在我的控制器上测试更新操作的失败分支,但我在测试时遇到问题。这就是我所拥有的,它在最后的
失败了describe "PUT 'article/:id'" do
.
.
.
describe "with invalid params" do
it "should find the article and return the object" do
Article.stub(:find).with("1").and_return(@article)
end
it "should update the article with new attributes" do
Article.stub(:update_attributes).and_return(false)
end
it "should render the edit form" do
response.should render_template("edit")
end
end
end
关于为什么最后一部分无法呈现模板的任何想法?
答案 0 :(得分:5)
您错误地拆分了部分测试。每个it
调用实际上都是一个新示例,状态在每个调用之前/之后重置。
你应该做的是:
describe "with invalid params" do
before do
@article = Article.create(valid_params_go_here)
end
it "should find the article and return the object" do
put :update, { :id => @article.id, :article => { :title => "" } }
response.should render_template("edit")
end
end
通过这种方式,@article
预先设置(尽管你可以使用模拟的真的想要)和update
的请求动作以及它实际呈现edit
模板的断言都发生在一个例子中。
答案 1 :(得分:0)
对于2018年要来这里的人们,已经进行了一些更新(双关语意)。在列出参数之前,请包含“ params”,这一点很重要。另外,您应该使用Expect而不是“ should”,因为它将在Rails 6.0中弃用。
describe "with invalid params" do
before(:each) do
@article = Article.create(valid_params_go_here)
end
describe "PATCH update/:id" do
it "should find the article and return the object" do
put :update, params: { id: @article.id, article: { title: "" } }
expect(response).to be_redirect
end
end