gpt4 book ai didi

ruby-on-rails - 如何通过枚举字段类型的模型进行规范测试 - Mongoid

转载 作者:行者123 更新时间:2023-12-01 00:51:06 24 4
gpt4 key购买 nike

编辑:根据@max 建议,我正在更改我的模型以使用枚举,但是我无法测试它的默认状态:

it { is_expected.to validate_inclusion_of(:status).to_allow("draft", "published") }

使用模型中的以下代码可以正常工作:
validates :status,        :inclusion => { :in => ["draft", "published"] }

但这部分仍然失败:
it { is_expected.to have_field(:status).with_default_value_of("draft") }

请注意,我使用的是 Mongoid。我的模型规范中有这个:

老问题 - 留作引用?
it { is_expected.to have_field(:published).of_type(Boolean).with_default_value_of(false) }

在我的模型中,我有这个:
field :published,         type: Mongoid::Boolean,     default: false

然而还是不行。我试过删除 Mongoid 位,但得到相同的错误:
Failure/Error: it { is_expected.to have_field(:published).of_type(Boolean).with_default_value_of(false) }
Expected Post to have field named "published" of type Boolean with default value of false, got field "published" of type Mongoid::Boolean

注意:我也试过:
field :published,         type: Boolean,     default: false

并在我的模型中添加了以下方法:
after_initialize :set_published, :if => :new_record?

然后
private
def set_published
self.published ||= false
end

但似乎没有任何效果。我错过了什么?

最佳答案

class Article
include Mongoid::Document
field :published, type: Boolean, default: false
end

require 'rails_helper'

RSpec.describe Article, type: :model do
it { is_expected.to have_field(:published)
.of_type(Mongoid::Boolean)
.with_default_value_of(false) }
end

mongoid (4.0.2) 上完美通过, mongoid-rspec (2.1.0) .

但坦率地说,将 bool 值用于模型状态是次优的。

如果你考虑一篇博客文章或文章,它可能是:
 1. draft
2. published
3. deleted
4. ...

在模型中添加 N 个开关很麻烦——一个很棒的解决方案是使用枚举。

首先写规范:
RSpec.describe Article, type: :model do

specify 'the default status of an article should be :draft' do
expect(subject.status).to eq :draft
end

# or with rspec-its
# its(:status) { should eq :draft }
end

然后添加 gem "mongoid-enum" 到您的 Gemfile。

最后添加枚举字段:
class Article
include Mongoid::Document
include Mongoid::Enum
enum :status, [:draft, :published]
end

枚举添加了所有这些令人敬畏的东西:
Article.published # Scope to get all published articles
article.published? # Interrogation methods for each state.
article.published! # sets the status

关于ruby-on-rails - 如何通过枚举字段类型的模型进行规范测试 - Mongoid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31298523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com