Я пытаюсь включить Concern в объект Rails ApplicationRecord.
Вот файл модели: /app/models/item.rb
class Item < ApplicationRecord
include Items::Validating
end
Вот файл проблемы: /app/models/concerns/items/validating.rb
module Items
module Validating
extend ActiveSupport::Concern
included do
before_create :set_defaults
validates :status, presence: true
validates :user_id, presence: true
validates :day, presence: true
end
def set_defaults
self.status ||= 'active'
self.day ||= Date.today
end
end
end
Когда я пытаюсь запустить тесты, я получаю следующую ошибку:
$ rails t
Error:
SessionsControllerTest#test_should_destroy_session:
NameError: uninitialized constant Item::Items
app/models/item.rb:3:in `<class:Item>'
app/models/item.rb:1:in `<main>'
Это странно, потому что я включаю проблемы с моделью User, и она работает совершенно нормально. Я не могу понять, что здесь отличается.
Обновление: нет ошибок при запуске сервера или консоли, это только при запуске тестов. Вот файл SessionsControllerTest:
require 'test_helper'
class SessionsControllerTest < ActionDispatch::IntegrationTest
setup do
@session = sessions(:one)
end
test "should fail to create session because of no email" do
assert_difference('Session.count', 0) do
post sessions_url, params: { email: 'no-email-found@no-email.com', password: 'password_hashed' }
end
assert_redirected_to login_url
end
test "should fail to create session because of no password" do
assert_difference('Session.count', 0) do
post sessions_url, params: { email: 'jerry@vandalay.com', password: 'password_hashed_wrong' }
end
assert_redirected_to login_url
end
test "should create session" do
email = 'jerry@vandalay.com'
assert_difference('Session.count') do
post sessions_url, params: { email: email, password: 'password_hashed' }
end
user = User.first_with_email(email)
assert_redirected_to dashboard_url
end
test "should destroy session" do
get logout_url
assert_redirected_to login_url
end
end