2017-08-23 6 views
0

J'ai un scénario de concombre avec les étapes suivantes:Rails | Concombre | Capybara | click_button génère GET demande

def create_admin 
    @admin ||= FactoryGirl.create(:admin) 
end 

def sign_in 
    visit '/admins/sign_in' 
    fill_in "Email", with: @admin.email 
    fill_in "Password", with: @admin.password 
    save_and_open_page 
    click_button "Sign in" 
end 

### Given ### 
Given /^I exist as an admin$/ do 
    create_admin 
end 

### WHEN ### 
When /^I sign in with valid credentials$/ do 
    sign_in 
end 


### THEN ### 
Then /^I see a Sign out link$/ do 
    page.should have_link "Sign out" 
end 

Ceci est le journal de test pour ces actions:

Started GET "/admins/sign_in" for 127.0.0.1 at 2017-08-23 11:10:14 +0200 
Processing by Devise::SessionsController#new as HTML 
    Rendering devise/sessions/new.html.erb within layouts/application 
    Rendered devise/shared/_links.html.erb (1.0ms) 
    Rendered devise/sessions/new.html.erb within layouts/application (130.1ms) 
Completed 200 OK in 361ms (Views: 348.5ms | ActiveRecord: 0.0ms) 

Started GET "/admins/sign_in?admin[email]=admin%40ca.coml&admin[password]=[FILTERED]&admin[remember_me]=0&commit=Sign+in" for 127.0.0.1 at 2017-08-23 11:10:14 +0200 
Processing by Devise::SessionsController#new as HTML 
    Parameters: {"admin"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"} 
    Rendering devise/sessions/new.html.erb within layouts/application 
    Rendered devise/shared/_links.html.erb (0.3ms) 
    Rendered devise/sessions/new.html.erb within layouts/application (3.2ms) 
Completed 200 OK in 10ms (Views: 6.6ms | ActiveRecord: 0.0ms) 

Je suis complètement confus par le fait que cliquer sur le Le bouton de connexion semble déclencher une requête GET. Depuis que cela fonctionne correctement dans le développement:

Started GET "/admins/sign_in" for 127.0.0.1 at 2017-08-23 11:08:26 +0200 
Processing by Devise::SessionsController#new as HTML 
    Rendering devise/sessions/new.html.erb within layouts/application 
    Rendered devise/shared/_links.html.erb (1.1ms) 
    Rendered devise/sessions/new.html.erb within layouts/application (4.2ms) 
Completed 200 OK in 37ms (Views: 35.6ms | ActiveRecord: 0.0ms) 


Started POST "/admins/sign_in" for 127.0.0.1 at 2017-08-23 11:08:28 +0200 
Processing by Devise::SessionsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"nVSRKgJ33eZ1pW6FZGQhOFis/9/d/LS3Cshez4sBZYx2Fx/8mmmBfyB1C1VQZ84kA48zyhocu3MLlKxLaD0JlA==", "admin"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"} 
    Admin Load (0.7ms) SELECT "admins".* FROM "admins" WHERE "admins"."email" = $1 ORDER BY "admins"."id" ASC LIMIT $2 [["email", "[email protected]"], ["LIMIT", 1]] 
    (0.3ms) BEGIN 
    SQL (0.4ms) UPDATE "admins" SET "current_sign_in_at" = $1, "sign_in_count" = $2, "updated_at" = $3 WHERE "admins"."id" = $4 [["current_sign_in_at", "2017-08-23 09:08:28.326296"], ["sign_in_count", 2], ["updated_at", "2017-08-23 09:08:28.327254"], ["id", 2]] 
    (7.5ms) COMMIT 
Redirected to http://localhost:3000/ 
Completed 302 Found in 181ms (ActiveRecord: 8.8ms) 

Où est-ce que je me trompe?

Répondre

0

Je suppose que vous utilisez le pilote 'rack_test' (par opposition à l'un des pilotes JS qui exécutent un navigateur réel) et que vous n'avez pas besoin de 'capybara/rails' qui indique le 'rack_test' le pilote pour rechercher l'attribut data-method et l'utiliser pour définir POST vs GET, ou votre formulaire est écrit pour exiger JS.

Si aucun de ces cas n'est le cas, veuillez poster le HTML du formulaire