Ich bin ein Neuling in Schienen und ich versuche jetzt, meinen Controller-Code mit Stubbs und Mocks zu testen. Ich versuchte mit dem Code zu spielen, aber ich konnte es nicht richtig machen. Bitte helfen Sie mir mit dem richtigen Code, der refaktoriert wird. Bitte helfen Sie mir mit der Erklärung für den Code, den Sie schreiben.Refactor-Code mit Mock und Stubb
require 'rails_helper'
RSpec.describe ArticlesController, type: :controller do
let(:article) { create :article}
let(:art_params) { attributes_for(:article) }
let(:dbl) {double(:articles)}
describe 'GET index' do
it 'assigns @articles' do
get :index
allow(dbl).to receive(:articles).and_return article
expect(dbl.articles).to eql(article)
#expect_any_instance_of(Article).to receive(:save).and_return(true)
end
it 'renders the index template' do
get :index
allow(dbl).to receive(:articles)
expect(response).to render_template('index')
end
end
describe 'GET :new' do
it 'render new template' do
get :new
expect(response).to render_template(:new)
end
end
describe 'POST/create' do
it 'created a new article ' do
expect { post :create, article: art_params }.to change(Article, :count).by(1)
end
end
describe 'POST/create not' do
it 'did not create a new user' do
# expect(art_params).to receive(attributes_for :article).with(content:)
art_params = { article: attributes_for(:article, content: nil) }
post :create, art_params
expect(response).to render_template(:new)
end
end
describe 'GET/edit' do
it 'displays the edit template' do
get :edit, id: article.id
expect(response).to render_template(:edit)
end
end
describe 'POST/update' do
it 'displays the update template' do
post :update, id: article.id, article: attributes_for(:article)
expect(response).to redirect_to(article_path(article.id))
end
end
describe 'POST/DELETE' do
it 'destroys the article template' do
dbl = double()
article = create :article
expect { delete :destroy, id: article.id }.to change(Article, :count).by(-1)
end
end
en
d
Mocks und Stubs sollten meiner Meinung nach nicht so viel im Controller-Code verwendet werden. Denn Controller-Aktionen sollen klein, kompakt und einfach zu bedienen sein. Stubs werden mehr in Komponententests verwendet, um zum Beispiel Callbacks in Tests loszuwerden oder eine lange Methode oder eine Anfrage eines Dritten zu stubben. – Kkulikovskis
Richtig, aber es könnte in einigen Fällen nützlich sein. Zum Beispiel könnten Sie sich über einen Aufruf von 'ActiveRecord # save' lustig machen, wenn Sie beispielsweise möchten, dass Ihre Tests schneller ablaufen und nicht jedes Mal die Datenbank treffen. – born4new