2015-06-23 5 views
0

Я просмотрел похожие потоки, но у них нет такой же проблемы, как это.Rails Tutorial Chapter 8 тесты ожидают, что Redirect return 200

Я работаю над учебником Rails 4. Я на восьмой главе. Я использую среду IDE Cloud9. Когда я запускаю сервер, и я вхожу в систему непосредственно на веб-сайте, он работает отлично. Но когда я пытаюсь проверить «логин с достоверной информацией», который должен появиться зеленым, это не так.

Получаю эту ошибку.

FAIL["test_login_with_valid_information", UsersLoginTest, 2015-05-10 20:30:40 +0000] 
test_login_with_valid_information#UsersLoginTest (1431289840.31s) 
    Expected response to be a <redirect>, but was <200> 
    test/integration/users_login_test.rb:22:in `block in <class:UsersLoginTest>' 

, который заставляет меня думать, что что-то не так с моими учетными данными для проверки, но я не могу понять, где.

С консолью рельсов я получаю следующее:

>> User.first 
    User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 
=> #<User id: 1, name: "Michael Example", email: "[email protected]", created_at: "2015-06-23 17:55:51", updated_at: "2015-06-23 18:52:37", password_digest: "$2a$10$Xl36B/1PmWJmsUOh3JBmnuQmhwLEIq1B5626jcW46fv..."> 

Вот мой код:

теста/интеграции/users_login_test.rb

require 'test_helper' 

class UsersLoginTest < ActionDispatch::IntegrationTest 

    def setup 
    @user = users(:michael) 
    end 

    test 'login with invalid information' do 
    get login_path 
    assert_template 'sessions/new' 
    post login_path, session: { email: "", password: "" } 
    assert_template 'sessions/new' 
    assert_not flash.empty? 
    get root_path 
    assert flash.empty? 
    end 

    test 'login with valid information' do 
    get login_path 
    post login_path, session: { email: @user.email, password: 'password' } 
    assert_redirected_to @user 
    follow_redirect! 
    assert_template 'users/show' 
    assert_select "a[href=?]", login_path, count: 0 
    assert_select "a[href=?]", logout_path 
    assert_select "a[href=?]", user_path(@user) 
    end 
end 

тест/приборы/users.yml

michael: 
    name: Michael Example 
    email: [email protected] 
    password_digest: <%= User.digest("password") %> 

приложение/модели/user.rb

class User < ActiveRecord::Base 
    before_save { email.downcase! } 
    validates :name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255 }, 
        format: { with: VALID_EMAIL_REGEX }, 
        uniqueness: { case_sensitive: false } 
    has_secure_password 
    validates :password, length: { minimum: 6 } 

    def User.digest(string) 
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 
                BCrypt::Engine.cost 
    BCrypt::Password.create(string, cost: cost) 
    end 
end 

Я полностью застрял, пытаясь понять это.

добавлены по запросу: приложение/контроллеры/sessions_controler.rb

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:passowrd]) 
     log_in user 
     redirect_to user 
    else 
     flash.now[:danger] = 'Invalid email/password combination' #Not quite right! 
     render 'new' 
    end 
    end 

    def destroy 
    log_out 
    redirect_to root_url 
    end 
end 
+2

Можем ли мы видеть ваш контроллер сеансов? Это поможет нам понять, что происходит при создании нового сеанса. –

+0

OMG. Я ошибся с ошибкой в ​​строке 'if user && user.authenticate (params [: session] [: passowrd])' Теперь он работает. – Okomikeruko

ответ

0

Спасибо steve klein за помощь мне найти ответ. Проблема была в контроллере сеансов.

if user && user.authenticate(params[:session][:passowrd]) 

Простая опечатка (пароль) меня закручивала.

Смежные вопросы