Неинициализированная константа 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 вы используете.

Надеюсь это поможет.

Другие вопросы по тегам