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