Ruby on rails 未初始化的常量ArticleFormTest::教程中的文章

Ruby on rails 未初始化的常量ArticleFormTest::教程中的文章,ruby-on-rails,reform,Ruby On Rails,Reform,我正在学习关于改革创业板的教程,但遇到了一个错误 来源: 错误: NameError:未初始化的常量ArticleFormTest::Article test/forms/article\u form\u test.rb:8:in'setup' 我的理解是,这是由下面的@model=Article.new产生的: require 'test_helper' class ArticleFormTest < ActiveSupport::TestCase def setup

我正在学习关于
改革
创业板的教程,但遇到了一个错误

来源:

错误:

NameError:未初始化的常量ArticleFormTest::Article test/forms/article\u form\u test.rb:8:in'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
有人能告诉我可能做错了什么吗

更新 下面按请求添加

测试助手.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

这是你的线索:
ArticleFormTest::Article

由于在任何地方都找不到定义的
文章
类,因此它假定它在当前类中的某个位置具有名称空间,而实际上并非如此。所以系统抛出了一个错误。您需要让您的测试知道文章模型是在哪里定义的,或者在测试中定义它(我强烈建议不要这样做-将您的定义放在一个地方,除非您可以证明仅为测试创建一个单独的定义是合理的)

对于你的评论:

“此外,我认为我不需要article.rb文件作为 改革就是要使形式与模型脱钩……我错了吗?”

您仍然需要向表单提供一个模型,以便表单进行处理。改革只是一种特殊类型的对象——一种形式对象,它知道如何使用模型,但它仍然需要一个模型。这里的解耦指的是,您的模型只处理持久性(写入和保存到存储(DB、硬盘、内存)以及一些查找范围)。改革或形成对象,协调如何验证数据并将其插入到一个或多个模型中

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

还有一件事需要强调,那也许有一天会有用:改革——不在乎模式是什么。就改革而言,它只是一个普通的ruby对象。这意味着改革不在乎模型是否由数据库、文本文件、处理图形文件的临时对象等支持。特别是如果您使用干式rb/dry验证,而不是ActiveModel验证,它甚至不需要知道您使用的是什么ORM


希望这有帮助

你能分享你的
文章表单
所在的项目路径吗?/app/forms/article\u form.rb你能显示你的
测试助手.rb
的内容吗?您尚未创建文章模型,或者您的应用程序环境未加载,因为它试图在
ArticleFormTest
下定位
Article
请共享您定义文章模型的路径,除了
article.rb
文件之外,您还需要定义您的模型,并且在article.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