Я пытаюсь проверить некоторые полномочия на моем сайте, используя RSpec & Capybara. Идея состоит в том, что статью можно редактировать только администратором объявления или человеком, который написал статью. Я не использую никаких драгоценных камней, всего несколько простых правил.Простой авторизационный тест с RSpec & Capybara с ошибкой
Это моя спецификация:
require 'rails_helper'
require 'capybara/rspec'
describe "the authorization process", :type => :feature do
before :each do
@user = User.new(:id => 3, :email => '[email protected]', :password => 'password', :password_confirmation => 'password', :username => 'Dummy User')
@user.save
end
it "does not allow a registered user to edit others' articles" do
visit '/login'
within("#new_user") do
fill_in 'Email', :with => '[email protected]'
fill_in 'Password', :with => 'password'
end
click_button 'Log in'
expect(page).to have_title 'Website Name'
expect(page).to have_content 'Signed in successfully!'
# Seems to be working up to here
visit section_path('mysection')
click_link 'Some link on the page'
expect(current_path).to eq(my_article_path(section: 'mysection', year: 2014, month: 10))
end
end
но работает это возвращает следующее сообщение об ошибке:
Failures:
1) the authorization process does not allow a registered user to edit others' articles
Failure/Error: click_link 'Some link on the page'
NoMethodError:
undefined method `username' for nil:NilClass
# ./app/controllers/articles_controller.rb:38:in `show'
Так я смотрю на articles_controller.rb файл и найти:
34 def show
35 if @article.nil?
36 redirect_to root_path, alert: "Oops! There are no articles matching a url ending in \"#{params[:id]}\""
37 else
38 @username = @article.user.username
39 end
40 end
Я попытался использовать pry, чтобы увидеть, что происходит прямо перед @username = @article.user.username
линия. Похоже, что мой объект @article
существует, но вызов .user
из моего теста возвращает nil
и, как следствие, вызывая .username
, он также возвращает ноль, вызывая неудачный тест.
Это работает в разработке и производстве, просто не в тесте. Мне интересно, как я могу это исправить?
Спасибо!
Где вы создаете статью в тесте? –
Не знаю. Как ни странно, pry показывает мне, что объект '@ article' существует, когда я попал в метод show в контроллере статей. – DaniG2k
О, я думаю, я понял ... Я думаю, мне нужно создать пользователя, на который ссылается эта конкретная статья. Я дам ему попробовать. – DaniG2k