Неинициализированная константа ArticleFormTest:: Учебное пособие по статье в Reform
Я работаю через учебник по reform
драгоценный камень, но столкнулся с ошибкой.
Source: http://culttt.com/2016/02/10/using-form-objects-in-ruby-on-rails-with-reform/
Ошибка:
NameError: uninitialized constant ArticleFormTest::Article test/forms/article_form_test.rb:8:in `setup'
My understanding is that this results from @model = Article.new
ниже:
require 'test_helper'
class ArticleFormTest < ActiveSupport::TestCase
def setup
@model = Article.new
@form = ArticleForm.new(@model)
end
test "should require title" do
@form.validate({})
assert_includes(@form.errors[:title], "can\'t be blank")
end
end
Я настроил article_form.rb
, (see below). So I'm not sure why this is happening.
require "reform/form/validation/unique_validator.rb"
class ArticleForm < Reform::Form
property :title, presence: true, unique: true
property :markdown, presence: true
property :published_at, presence: true
property :user, presence: true
end
Кто-нибудь может посоветовать, что я могу делать не так?
ОБНОВИТЬ
Below added per request.
test_helper.rb
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
# Add more helper methods to be used by all tests here...
end
1 ответ
Это ваша подсказка: ArticleFormTest::Article
Так как не могу найти Article
Класс, определенный где угодно, предполагает, что он находится в пространстве имен где-то в вашем текущем классе, а это не так. Так что система выдает ошибку. Вы должны сообщить своему тесту, где определена модель Article, или определить ее в тесте (я настоятельно рекомендую против этого - хранить ваши определения в одном месте, если только вы не можете оправдать создание отдельного определения только для теста.)
На ваш комментарий:
"Кроме того, я не думал, что мне нужен файл article.rb, так как цель реформы состоит в том, чтобы отделить формы от моделей... я не прав?"
Вам все еще нужна модель для предоставления в форму для ее обработки. Реформа - это просто специализированный тип объекта - объект формы, который знает, что делать с моделью, но ему все еще нужна модель. Разделение здесь относится к тому факту, что ваша модель имеет дело только с постоянством (запись и сохранение в хранилище (БД, жесткий диск, память) и, возможно, с некоторыми областями поиска). Реформировать или формировать объекты, управлять тем, как данные проверяются и вставляются в модель или несколько моделей.
Модели действительно хороши в моделировании хранения данных, но не всегда хороши в получении информации от реальных пользователей / систем. Это цель для Form Objects / Reform gem. А также, чтобы сделать модели более управляемыми.
Еще одна вещь, на которую стоит обратить внимание, которая может оказаться полезной в один прекрасный день: реформа - не важно, что это за модель. Это просто обычный рубиновый объект для Реформы. Это означает, что Reform не заботится, поддерживается ли модель БД, текстовым файлом, временным объектом, который имеет дело с графическим файлом, что угодно. Особенно если вы используете dry-rb/dry-validations, а не ActiveModel, вам даже не нужно знать, какой ORM вы используете.
Надеюсь это поможет.