ArticlesController
에 대한 다음 테스트를 실행하고 있습니다.활성 레코드 유효한 레코드가 존재하면`find`는 nil을 반환합니다.
describe "#destroy" do
let(:article) { articles(:article_1) }
let(:request) { delete :destroy, params: { id: article.id.to_s } }
it 'returns a 200 status socde when a correct request is made' do
request
expect(request.status).to eq 302
end
it 'deletes an article' do
expect{ request }.to change{ Article.count }.by(-1)
end
it 'deletes the correct article' do
expect(Article).to receive(:find).with(article.id.to_s)
request
end
end
이것은 ArticlesController
내 전류 파괴 대책 :
def destroy
p "********"
p params[:id].to_i
p Article.find_by(id: params[:id])
p Article.find(params[:id])
article.destroy
redirect_to articles_path
end
def article
@article ||= Article.find(params[:id])
end
:
"********"
960213061
#<Article id: 960213061, title: "First Article", body: "This is the first test article", published_at: nil, created_at: "2016-12-19 09:11:55", updated_at: "2016-12-19 09:11:55">
nil
F
find_by(id: params[:id]
잘 레코드를 찾지 만
find(params[:id])
는 무기 호를 반환합니다. 또한
find(params[:id].to_i)
은 nil을 리턴합니다. 누구나 그 이유를 알아낼 수 있습니까? 어떤 도움을 주셔서 감사합니다. 감사합니다
은 개발에서 예상대로 자체가 작동하는 방법을 파괴
업데이트되었습니다. 그것은과 실패 단지 테스트 그게 전부입니다 :
1) ArticlesController#destroy deletes the correct article
Failure/Error: article.destroy
NoMethodError:
undefined method `destroy' for nil:NilClass
# ./app/controllers/articles_controller.rb:30:in `destroy'
# ./spec/controllers/articles_controller_spec.rb:101:in `block (3 levels) in <top (required)>'
# ./spec/controllers/articles_controller_spec.rb:114:in `block (3 levels) in <top (required)>'
'ArticlesController'에서'article'이란 무엇입니까? 나에게 정의되지 않은 것처럼 보입니다. –
@AlexanderMorozov : 질문이 업데이트되었습니다. 미안 '기사'내 컨트롤러에있는 방법입니다 추가하는 것을 잊어 버렸습니다. – JonSayer