【问题标题】:Rails minitest, why is my article model invalid?Rails minitest,为什么我的文章模型无效?
【发布时间】:2021-10-01 16:55:16
【问题描述】:

我开始在 Rails 中使用 minitest 进行测试。目前,我第一次测试我的模型是否有效是返回 false。错误信息本身也很笼统Expected false to be truthy。我已经测试了其他所有东西,所有这些测试都运行良好。有人知道是什么原因造成的吗?

article_test.rb

require 'test_helper'

class ArticleTest < ActiveSupport::TestCase

    def setup
      @article = Article.new(title:"Avengers Endgame", body:"I am inevitable")
    end

    test "article should be valid" do
      assert @article.valid?
    end


    test "title should be present" do
        @article.title = " "
        assert_not @article.valid?
    end



    test "body should not be too short" do
        @article.body = "aa"
        assert_not @article.valid?
    end
end

article.rb

class Article < ApplicationRecord
    include Visible
    
    belongs_to :user
    has_many :comments, dependent: :destroy
    has_rich_text :body
    validates :title, presence: true
    validates :body, presence: true, length: { minimum: 10 }
  end

【问题讨论】:

    标签: ruby-on-rails ruby minitest


    【解决方案1】:

    这里的主要问题是您使用了一种糟糕的方法来测试您的验证。

    assert @article.valid?assert_not @article.valid? 实际上并没有告诉你关于被测对象的任何信息。当测试失败时,你对它为什么失败以及失败是否真的与你据称测试的内容有关,你一无所知。充其量它可以作为测试设置是否正确的一种试金石。

    而不是这种“地毯式轰炸”方法,而是单独测试每个验证:

    class ArticleTest < ActiveSupport::TestCas
      test "title should be present" do
        article = Article.new(title: '')
        article.valid?
        assert_includes build_article.errors[:title], "can’t be blank" 
      end
    
      test "body should not be too short" do
        article = Article.new(body: 'aa')
        article.valid?
        assert_includes article.errors[:body], "is too short" 
      end
    end
    

    无论如何,一次测试所有验证(使用有效输入创建记录)将包含在您的集成和系统测试中。

    【讨论】:

    【解决方案2】:

    您有belongs_to :user,它希望@article 存在user_id compulsorily,然后才能保存。

    如果user_id 在创建过程中是可选的,请更改:

    belongs_to :user
    

    belongs_to :user, optional: true
    

    【讨论】:

    • 我不确定我想这样做。我正在使用设计进行身份验证,我担心这会破坏应用程序本身,而不仅仅是我正在尝试做的测试。
    • @Jasper:那么,为那篇文章分配一个用户。
    • @Jasper 取决于您的目标和意图。如果您的意图是 @article 可以在没有 user_id 的情况下有效,那么您必须将其创建为可选关联。如果不是,那么您要么断言@artcile 无效,要么将用户分配给该文章。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多