Quelle est la stratégie actuelle pour tester le filtrage des paramètres forts dans le contrôleur Rails avec Rspec? (Excepté les allumettes shoulda) Comment écrire un test qui échoue et le rendre vert?Comment tester les paramètres forts avec Rspec?
Répondre
Créer 2 hachages avec les paramètres attendus et tous (avec insatisfaits). Passez ensuite tous les paramètres à l'action et vérifiez que le modèle objet ne reçoit que les paramètres attendus. Ce ne sera pas si vous n'utilisez pas de filtres de paramètres forts. Ajoutez des autorisations aux paramètres et vérifiez à nouveau le test.
Par exemple, ceci:
# action
def create
User.create(params)
end
# spec
it 'creates a user' do
expect_any_instance_of(User).to receive(:create).
with({name: 'Sideshow Bob'}.with_indifferent_access)
post :create, user:
{ first_name: 'Sideshow', last_name: 'Bob', name: 'Sideshow Bob' }
end
passera tous les params à l'utilisateur et test échouera. Et quand vous les filtrer:
def user_params
params.require(:user).permit(:name)
end
et de l'action de changement avec User.create(user_params)
, le test passera.
'create' est une méthode de niveau classe définie sur' ActiveRecord :: Base' et héritée par 'User'. Donc, alors que 'expect_any_instance (User)' (attente fictive sur une instance de 'User') _might_ work,' expect (User) '(attente fictive sur la classe' User') fonctionnera aussi bien et est plus minimal. – dleve123
Voici comment je l'ai fait:
describe 'Safe Params' do
let(:mixed_params) {
{
blueprint_application_environment: {
id: 1000,
blueprint_id: 1,
application_id: 2,
environment_id: 3
},
format: :json
}
}
context "when processing a Post request with a mix of permitted and unpermitted parameters" do
before { post :create, mixed_params }
it "a create will not set the value of the unpermitted parameter" do
expect(JSON.parse(response.body)["id"]).not_to eq(1000)
end
it "a create will set the value of the permitted parameters" do
expect(JSON.parse(response.body)["blueprint_id"]).to eq(1)
expect(JSON.parse(response.body)["application_id"]).to eq(2)
expect(JSON.parse(response.body)["environment_id"]).to eq(3)
end
end
fin
code contrôleur:
def create
@blueprint_application_environment = BlueprintApplicationEnvironment.new(blueprint_application_environment_params)
if @blueprint_application_environment.save
render 'show.json.jbuilder'
else
render json: @blueprint_application_environment.errors, status: :unprocessable_entity
end
end
def blueprint_application_environment_params
params.require(:blueprint_application_environment).permit(:blueprint_id, :application_id, :environment_id)
end
J'utilise personnellement shoulda-matcher de thoughtbot.
Avec quelque chose comme:
it do
should permit(:first_name, :last_name, :email, :password).
for(:update, params: params)
end
comme comme vous créez ou objet de mise à jour à l'aide des paramètres forts, il est également similaire, sauf une chose que normale vous comme ceci:
message: créer, book_id: @ book.id
Mais fort paramètre que vous devez faire comme ceci:
message: créer, {book_id: @ book.id, commentaire: {user_id: 101, book_id: @ book.id, description: "vaut la peine d'acheter"}}
vous avez transmettre des paramètres imbriqués.
- 1. Comment utiliser les paramètres forts avec des clés étrangères
- 2. Test des nouveaux paramètres forts de Rails
- 3. comment tester les contrôleurs avec rspec
- 4. Rails Paramètres forts Fusion ou paramètres forts conditionnels
- 5. comment tester STDIN avec RSpec
- 6. Comment tester cela avec RSpec?
- 7. Comment tester unit_nested_attributes_for avec RSpec?
- 8. Concevoir et paramètres forts
- 9. Comment créer une clé de paramètres forts optionnelle tout en conservant les paramètres de filtrage imbriqués?
- 10. rspec tester les vues avec l'internationalisation?
- 11. Paramètres forts dans les rails 3.2.8
- 12. Rails Associations - Paramètres forts Build
- 13. Rspec 3 comment tester les messages flash
- 14. Test de paramètres forts avec minitest dans Rails 4
- 15. Comment tester une tâche rake avec RSpec?
- 16. Comment tester une redirection javascript avec RSpec?
- 17. comment tester les collections d'ActiveRecords dans rspec?
- 18. Rspec: tester les contrôleurs imbriqués
- 19. Comment tester les moteurs Rails 3 avec Concombre & Rspec?
- 20. Comment tester les requêtes rspec ActiveRecord avec plusieurs assocations
- 21. Comment tester les jobs d'arrière-plan (Sidekiq) avec Rspec?
- 22. Récursif/Arbre comme des paramètres forts?
- 23. Rspec Strong Parameter dépouillant les paramètres
- 24. Rails 4, attributs imbriqués, paramètres forts & JSON
- 25. Générer faux CSV pour tester avec rspec
- 26. tester des validations strictes dans les rails 3.2 avec rspec
- 27. Rspec Test Paramètres requis
- 28. Rails 4 paramètres forts d'erreur de syntaxe
- 29. Paramètres forts dans le numéro de test
- 30. constante non initialisée ApplicationController :: PermittedParams paramètres forts
Est-ce que ma réponse a aidé? Peut-être que je peux clarifier quelque chose. – zishe
Merci, vous m'avez vraiment aidé. Je ne savais pas à propos de with_indifferent_access. Et comment tester les exigences d'attributs, comme params.require: user? – Molfar