Мой контрольный тест не проходит. У меня есть before_acton в моем журнале ReviewsController, который проверяет текущего пользователя. Если его нет, он не должен завершить действие create и перенаправить. Но он ее создает, несмотря на то, что сеанс [: user_id] равен нулю. Вот мой код:Контрольный тест не проходит в рельсах
it "doesnt create review if there is valid input, but not authenticated" do
video = Video.create(title: "new title", description: "new description")
review = Review.create(content: "content1", rating: 1)
expect(Review.count).to eq(0)
end
В моей ReviewsController:
def create
@video = Video.find(params[:video_id])
@review = Review.new(parameters)
rating = params[:review][:rating]
content = params[:review][:content]
@review.content = content
@review.rating = rating
@review.user_id = current_user.id
@review.video = @video
@review.save
redirect_to @video
end
У меня есть before_action в контроллере Обзоры, что проверить, если пользователь прошел проверку подлинности. Если сеанс [: user_id] равен нулю, он перенаправляется на путь sign_in_path. Вот методы:
def current_user
@current_user = User.find(session[:user_id]) if session[:user_id]
end
def require_user
redirect_to sign_in_path unless current_user
end
в моем файле reviews_controller_spec.rb, он не должен создать обзор, потому что он не должен пройти мимо before_action: require_user
Почему объект обзора по-прежнему создается ? Почему фильтр before_action не останавливает его? Тест терпит неудачу, и как раз говорит, что ожидается Review.count быть 0, но получил 1.
Вы на самом деле не вызываете своего контроллера в этой спецификации ... просто создаете записи и проверяете, были ли они созданы. – sevenseacat
Я пробовал "сообщение: создать, содержимое:" новый контент ", рейтинг: 3" вместо "review = Review.create (content:" content1 ", рейтинг: 1)", но это дало мне ошибку "Нет маршрутов : action => "create" ", но в моем контроллере есть определенное действие. – joey
Вы создали тестовую базу данных, и данные там создаются? –