未初始化的常量ArticleFormTest ::改革宝石教程中的文章

时间:2016-06-27 23:18:21

标签: ruby-on-rails reform

我正在研究reform gem的教程,但遇到了错误。

来源: http://culttt.com/2016/02/10/using-form-objects-in-ruby-on-rails-with-reform/

错误:

  

NameError:未初始化的常量ArticleFormTest :: Article       test / forms / article_form_test.rb:8:在`setup'

我的理解是,这来自下面的@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,(见下文)。所以我不确定为什么会这样。

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

任何人都可以告诉我可能做错了吗?

更新

根据请求添加以下内容。

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 个答案:

答案 0 :(得分:2)

这是你的线索:ArticleFormTest::Article

由于它无法在任何地方找到Article类,因此它假定它在当前类的某处被命名空间 - 它不是。因此系统会抛出错误。您需要让测试知道文章模型的定义位置或在测试中定义它(我强烈建议不要使用它 - 将您的定义保存在一个地方,除非您可以证明为测试创建单独的定义。)

发表评论:

  

“另外,我认为我不需要article.rb文件作为目的   改革是将形式与模型分离..我不正确吗?“

您仍然需要一个模型来提供表单以供处理。改革只是一种特殊类型的对象 - 一种形式对象,用模型知道做什么,但它仍然需要一个模型。这里的解耦是指您的模型仅处理持久性(写入和保存到存储(DB,硬盘驱动器,内存)以及某些查找范围)。改革或表单对象,协调数据如何验证并插入到模型或多个模型中。

模型非常擅长建模数据存储,但并不总是擅长从现实世界的用户/系统获取输入。这就是Form Objects / Reform gem的目的。并且还使模型更易于管理。

还有一件事要强调,有朝一日可能会有用:改革 - 不关心什么是模式。就改革而言,这只是一个普通的红宝石对象。这意味着,改革并不关心模型是否由数据库,文本文件,处理图形文件的临时对象等提供支持。特别是如果你使用dry-rb / dry-validations而不是ActiveModel验证,它甚至不需要知道你正在使用什么ORM。

希望这会有所帮助。