Rails: Shoulda-matchers belong_to 可选测试
Rails: Shoulda-matchers belong_to optional test
我有模型
class Certificate < ApplicationRecord
notification_object
belongs_to :user
belongs_to :share_class, optional: true
belongs_to :round, optional: true
belongs_to :company, optional: true
has_many :approvals, as: :votable
end
该型号的规格如下所示
需要'rails_helper'
RSpec.describe Certificate, type: :model do
it { should belong_to(:user) }
it { should belong_to(:share_class).optional }
it { should belong_to(:round).optional }
it { should belong_to(:company).optional }
it { should have_many(:approvals) }
end
但是当我运行这个规范时我得到这个错误
1) 证书应属于 share_class 可选:true
Failure/Error: it { should belong_to(:share_class).optional }
Expected Certificate to have a belongs_to association called share_class (the association should have been defined with`optional: true`, but was not)
# ./spec/models/certificate_spec.rb:5:in `block (2 levels) in <top (required)>'
我不知道为什么会出现此错误。
首先,您应该阅读 this 对话。
@mcmire We have a pre-release version out now! Try v4.0.0.rc1 to get optional.
然后,预期的代码应如下所示:
RSpec.describe Certificate, type: :model do
it { should belong_to(:user) }
it { should belong_to(:share_class).optional }
it { should belong_to(:round).optional }
it { should belong_to(:company).optional }
it { should have_many(:approvals) }
end
class Person < ActiveRecord::Base
belongs_to :organization, optional: true
end
# RSpec
describe Person
it { should belong_to(:organization).optional }
end
# Minitest (Shoulda)
class PersonTest < ActiveSupport::TestCase
should belong_to(:organization).optional
end
我有模型
class Certificate < ApplicationRecord
notification_object
belongs_to :user
belongs_to :share_class, optional: true
belongs_to :round, optional: true
belongs_to :company, optional: true
has_many :approvals, as: :votable
end
该型号的规格如下所示
需要'rails_helper'
RSpec.describe Certificate, type: :model do
it { should belong_to(:user) }
it { should belong_to(:share_class).optional }
it { should belong_to(:round).optional }
it { should belong_to(:company).optional }
it { should have_many(:approvals) }
end
但是当我运行这个规范时我得到这个错误
1) 证书应属于 share_class 可选:true
Failure/Error: it { should belong_to(:share_class).optional }
Expected Certificate to have a belongs_to association called share_class (the association should have been defined with`optional: true`, but was not)
# ./spec/models/certificate_spec.rb:5:in `block (2 levels) in <top (required)>'
我不知道为什么会出现此错误。
首先,您应该阅读 this 对话。
@mcmire We have a pre-release version out now! Try v4.0.0.rc1 to get optional.
然后,预期的代码应如下所示:
RSpec.describe Certificate, type: :model do
it { should belong_to(:user) }
it { should belong_to(:share_class).optional }
it { should belong_to(:round).optional }
it { should belong_to(:company).optional }
it { should have_many(:approvals) }
end
class Person < ActiveRecord::Base
belongs_to :organization, optional: true
end
# RSpec
describe Person
it { should belong_to(:organization).optional }
end
# Minitest (Shoulda)
class PersonTest < ActiveSupport::TestCase
should belong_to(:organization).optional
end