Je suis nouveau à Rspec et j'essaie de tester mes méthodes de contrôleur pour les fonctionnalités de base. Je sais que je ne suis pas censé tester les fonctionnalités de base, mais je le fais plus à des fins d'apprentissage que pour construire quelque chose.Rspec post: créer 'mot-clé inconnu:'
J'ai un contrôleur appelé ProtocolsController. Le contrôleur est utilisé pour la fonctionnalité CRUD de base. J'essaie de tester la méthode #create des contrôleurs. Ci-dessous mon contrôleur #create:
def create
@protocol = Protocol.new(protocol_params)
if @protocol.save
flash[:notice] = 'New protocol added'
redirect_back(fallback_location: 'test_results#index')
else
flash[:notice] = @protocol.errors[:name]
render 'new'
end
end
Pour tester le chemin triste, je veux passer au contrôleur un objet simulé qui contient les paramètres nécessaires à la création d'une instance de la classe Protocole. Pour ce faire, j'ai le code suivant:
describe '#create' do
it 'fails to save because the name already exists' do
params = FactoryGirl.attributes_for(:protocol)
post :create, :protocol => params
end
end
Maintenant, je sais que le test est incomplet, mais je teste une ligne à la fois et quand je lance Rspec je reçois l'erreur suivante:
Failure/Error: post :create, :protocol => params
ArgumentError:
unknown keyword: protocol
Mais quand je change de poste à: expect { post :create, :protocol => params }
Cela fonctionne. Ce qui m'amène à mes questions:
- Pourquoi le premier message (
post :create, :protocol => params
) échoue? - Comment procéder pour envoyer un objet simulé au contrôleur?
- Pourquoi la version attendue fonctionne-t-elle?
Tout aperçu des questions sera grandement apprécié. Je me gratte la tête en essayant de comprendre cela et je suppose que c'est une réponse évidente.
Quelle version de RSpec utilisez-vous? –
la dernière version -> 3.6 – Darkisa