tutorial rails mega instalar experto español desde curso crear completo certificado ruby-on-rails-4 railstutorial.org

ruby on rails 4 - mega - Tutorial de Rails: método indefinido



ruby on rails tutorial español (1)

Estoy atascado (¡otra vez!) En el Capítulo 9 (esta vez en la sección 9.2.2) del tutorial Rails. estoy obteniendo

bundle exec rspec spec/ ................................FFF........................ Failures: 1) Authentication authorization as wrong user submitting a GET request to the Users#edit action Failure/Error: before {sign_in user, no_capybara: true} NoMethodError: undefined method `new_remember_token'' for #<User:0x007f8181815448> # ./spec/support/utilities.rb:13:in `sign_in'' # ./spec/requests/authentication_pages_spec.rb:71:in `block (4 levels) in <top (required)>''

Los otros 2 errores son del mismo tipo.

Aquí está la especificación que causa los errores:

describe "as wrong user" do let(:user) {FactoryGirl.create(:user)} let(:wrong_user) {FactoryGirl.create(:user, email: "[email protected]")} before {sign_in user, no_capybara: true} describe "submitting a GET request to the Users#edit action" do before {get edit_user_path(wrong_user)} specify { expect(response.body).not_to match(full_title(''Edit user''))} specify { expect(response).to redirect_to(root_url)} end describe "submitting a PATCH request to the Users#update action" do before { patch user_path(wrong_user)} specify { expect(response).to redirect_to(root_url)} end end

Y aquí está el método (utilities.rb) del que el mensaje de error se queja:

def sign_in (user, options={}) if options[:no_capybara] # Sign in when not using Capybara remember_token = User.new_remember_token cookies[:remember_token] user.update_attribute(:remember_token, User.digest(remember_token)) else visit signin_path fill_in "Email", with: user.email fill_in "Password", with: user.password click_button "Sign in" end end

El código para el modelo (User.rb) está aquí:

class User < ActiveRecord::Base before_save { self.email = email.downcase} before_create :create_remember_token validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = //A[/w+/-.]+@[a-z/d/-.]+/.[a-z]+/z/i validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false } validates :password, length: {minimum: 6} has_secure_password def User.new_remember_token SecureRandom.urlsafe_base64 end def User.digest(token) Digest::SHA1.hexdigest(token.to_s) end private def create_remember_token self.remember_token = User.digest(User.new_remember_token) end end

Anteriormente tuve problemas con el método sign_in, pero desapareció milagrosamente . ¿Qué estoy haciendo mal?


Finalmente encontré el culpable de los resultados de prueba erráticos que he estado observando en este caso y, muy probablemente, en ocasiones anteriores ( Error / Error: sign_in usuario método indefinido `sign_in '' , Rails named route no reconocido ). El problema parece ser que los rieles no borran por defecto el caché entre las pruebas. Lo cual es, en realidad, francamente aterrador. Parece que no puedes confiar en los resultados de la prueba. Me di cuenta de esto comentando el método del que se quejaba Rails y volviendo a ejecutar la prueba. El error persistió, lo que significaba una cosa: rspec simplemente estaba trabajando con algunas versiones almacenadas en caché de los archivos y, por lo tanto, haciendo caso omiso de los cambios que estoy realizando. Entonces, incluso si las pruebas pasan, no puedes estar seguro de que realmente lo hagan. Esto es realmente extraño. Después de darme cuenta del problema con un poco de google, encontré cómo forzar los rieles para limpiar el caché: compruebe la respuesta de jaustin aquí: ¿ se purga Rails.cache entre pruebas?