gpt4 book ai didi

ruby-on-rails - 如何编写RSpec测试以进行简单的PUT更新?

转载 作者:行者123 更新时间:2023-12-03 08:46:25 26 4
gpt4 key购买 nike

我试图巩固对Rails和BDD工作流程的理解,所以我想从创建小型博客之一开始,但要使用rspec。现在,我有一个ArticlesController和Article模型,以及相关的rspec文件。 Article非常简单,只有title:string和content:text,而ArticlesController是RESTful的-尽管我是为Article亲自编写MCV的,但它与使用脚手架创建它的基本相同。

但是,我真的不知道在rspec中为PUT更新编写测试时我在做什么。我正在使用Factory Girl创建article对象,到目前为止,我的代码如下:

#factories.rb
FactoryGirl.define do
factory :article do
title "a title"
content "hello world"
end

#articles_controller_spec.rb
before(:each) do
@article = Factory(:article)
end

describe "PUT 'update/:id'" do
it "allows an article to be updated" do
@attr = { :title => "new title", :content => "new content" }
put :update, :id => @article.id, :article => @attr
response.should be_successful
end
end

但是我不断得到:
Failures:
1) ArticlesController PUT 'update/:id' allows an article to be updated
Failure/Error: response.should be_successful
expected successful? to return true, got false

我究竟做错了什么?我在使用正确的工具吗?当我运行测试服务器时,New,Edit,Destroy会按照我期望的那样进行所有工作,所以我猜测这是我对RSpec的理解存在的问题。让我知道我是否错-谢谢!

最佳答案

您忘记对.reload进行@article了,而对update进行操作时,您的响应很可能会执行重定向,因此

RSpec 2:

describe "PUT update/:id" do
let(:attr) do
{ :title => 'new title', :content => 'new content' }
end

before(:each) do
put :update, :id => @article.id, :article => attr
@article.reload
end

it { response.should redirect_to(@article) }
it { @article.title.should eql attr[:title] }
it { @article.content.should eql attr[:content] }
end

Rspec 3:
describe "PUT update/:id" do
let(:attr) do
{ :title => 'new title', :content => 'new content' }
end

before(:each) do
put :update, :id => @article.id, :article => attr
@article.reload
end

it { expect(response).to redirect_to(@article) }
it { expect(@article.title).to eql attr[:title] }
it { expect(@article.content).to eql attr[:content] }
end

关于ruby-on-rails - 如何编写RSpec测试以进行简单的PUT更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9223336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com