ruby on rails - RSpec tests broken after application i18n -


after finishing railstutorial.org have decided i18n application , suddently tests started failing following,

failures:

1) user pages index failure/error: sign_in user capybara::elementnotfound: unable find field "email" # ./spec/support/utilities.rb:5:in sign_in' # ./spec/requests/user_pages_spec.rb:11:inblock (3 levels)

the changes have made where,

routes.rb

sampleapp::application.routes.draw   scope '(:locale)'     resources :users     resources :sessions, only: [:new, :create, :destroy]     root to: 'static_pages#home'     match '/signup',    to: 'users#new',              via: 'get'     match '/signin',    to: 'sessions#new',           via: 'get'     match '/signout',   to: 'sessions#destroy',       via: 'delete'     match '/help',      to: 'static_pages#help',      via: 'get'     match '/about',     to: 'static_pages#about',     via: 'get'     match '/contact',   to: 'static_pages#contact',   via: 'get'   end 

and config/initializers/i18n.rb

i18n.default_locale = :en  languages = [   ['english',               'en'],   ['portuguese',        'pt'] ] 

before i18n routes looked following,

users_path      /users(.:format)    users#index     post    /users(.:format)    users#create new_user_path       /users/new(.:format)    users#new edit_user_path      /users/:id/edit(.:format)   users#edit user_path       /users/:id(.:format)    users#show     patch   /users/:id(.:format)    users#update     put     /users/:id(.:format)    users#update     delete  /users/:id(.:format)    users#destroy sessions_path   post    /sessions(.:format)     sessions#create new_session_path        /sessions/new(.:format)     sessions#new session_path    delete  /sessions/:id(.:format)     sessions#destroy root_path       /   static_pages#home signup_path         /signup(.:format)   users#new signin_path         /signin(.:format)   sessions#new signout_path    delete  /signout(.:format)  sessions#destroy help_path       /help(.:format)     static_pages#help about_path      /about(.:format)    static_pages#about contact_path        /contact(.:format)  static_pages#contact  

and now,

users_path      (/:locale)/users(.:format)  users#index     post    (/:locale)/users(.:format)  users#create new_user_path       (/:locale)/users/new(.:format)  users#new edit_user_path      (/:locale)/users/:id/edit(.:format)     users#edit user_path       (/:locale)/users/:id(.:format)  users#show     patch   (/:locale)/users/:id(.:format)  users#update     put     (/:locale)/users/:id(.:format)  users#update     delete  (/:locale)/users/:id(.:format)  users#destroy sessions_path   post    (/:locale)/sessions(.:format)   sessions#create new_session_path        (/:locale)/sessions/new(.:format)   sessions#new session_path    delete  (/:locale)/sessions/:id(.:format)   sessions#destroy root_path       /(:locale)(.:format)    static_pages#home signup_path         (/:locale)/signup(.:format)     users#new signin_path         (/:locale)/signin(.:format)     sessions#new signout_path    delete  (/:locale)/signout(.:format)    sessions#destroy help_path       (/:locale)/help(.:format)   static_pages#help about_path      (/:locale)/about(.:format)  static_pages#about contact_path        (/:locale)/contact(.:format)    static_pages#contact  

user_pages_spec.rb

require 'spec_helper'  describe "user pages"      subject { page }      describe "index"         let(:user) { factorygirl.create(:user) }          before (:each)             sign_in user             visit users_path         end          { should have_title('all users') }         { should have_content('all users') }          describe "pagination"             before(:all) { 30.times { factorygirl.create(:user) } }             after(:all) { user.delete_all }              { should have_selector('div.pagination') }              "should list each user"                 user.paginate(page: 1).each |user|                     expect(page).to have_selector('li', text: user.name)                 end             end         end          describe "delete links"              { should_not have_link('delete') }              describe "as admin user"                 let(:admin) { factorygirl.create(:admin) }                 before                   sign_in admin                   visit users_path                 end                  { should have_link('delete', href: user_path(user.first)) }                 "should able delete user"                     expect{ click_link('delete') }.to change(user, :count).by(-1)                 end                 { should_not have_link('delete', href: user_path(admin)) }             end         end     end      describe "profile page"         let(:user) { factorygirl.create(:user) }         before { visit user_path(user) }          { should have_content(user.name) }         { should have_title(user.name) }     end      describe "signup page"         before { visit signup_path }          { should have_content('sign up') }         { should have_title(full_title('sign up')) }     end      describe "signup"          before { visit signup_path }          let(:submit) { "create account" }          describe "with invalid information"             "should not create user"                 expect { click_button submit }.not_to change(user, :count)                           end              describe "after submission"                 before { click_button submit }                  { should have_title('sign up') }                 { should have_content('error') }             end         end          describe "with valid information"             before               fill_in "name",           with: "example user"               fill_in "email",          with: "user@example.com"               fill_in "password",       with: "password"               fill_in "confirm password",   with: "password"             end              "should create user"                 expect { click_button submit }.to change(user, :count).by(1)             end              describe "after saving user"                 before { click_button submit }                 let(:user) { user.find_by(email: 'user@example.com') }                  { should have_link('sign out') }                 { should have_title(user.name) }                 { should have_selector('div.alert.alert-success', text: 'welcome') }             end         end     end      describe "edit"         let(:user) { factorygirl.create(:user) }         before           sign_in user           visit edit_user_path(user)         end          describe "page"             { should have_content("update profile") }             { should have_title("edit user") }         end          describe "with invalid information"             before { click_button "save changes" }              { should have_content('error') }         end          describe "with valid information"             let(:new_name) { "new name" }             let(:new_email) { "new@example.com" }             before               fill_in "name",               with: new_name               fill_in "email",              with: new_email               fill_in "password",           with: user.password               fill_in "confirm password",   with: user.password               click_button "save changes"             end              { should have_title(new_name) }             { should have_selector('div.alert.alert-success') }             { should have_link('sign out', href: signout_path) }             specify { expect(user.reload.name).to eql(new_name) }             specify { expect(user.reload.email).to eql(new_email) }         end          describe "forbidden attributes"             let(:params)                 { user: { admin: true, password: user.password, password_confirmation: user.password } }             end             before { patch user_path(user), params }             specify { expect(user.reload).not_to be_admin }         end     end end 

utilities.rb

include applicationhelper  def sign_in(user)     visit signin_path     fill_in "email",        with: user.email     fill_in "password",     with: user.password     click_button "sign in"     #sign in when not using capybara well.     cookies[:remember_token] = user.remember_token end 

could please provide tips beginners? support.

if you're going scope routes include locale, you'll need pass in locale paths when test them (as can see in new output rake routes, :locale expected), put, say, visit users_path, put
visit users_path(locale). locale list of i18n.available_locales. you'll need change strings you're using find fields i18n equivalent eg
fill_in "email" becomes fill_in i18n.t('sessions.new.email')

i i18n-ized sample app, here's user_pages_spec.rb give idea on kind of changes you'll need make.


Comments

Popular posts from this blog

monitor web browser programmatically in Android? -

Shrink a YouTube video to responsive width -

wpf - PdfWriter.GetInstance throws System.NullReferenceException -