所以我有以下规范:
require 'rails_helper'
class SpecRecord
# include ActiveModel::Model
include ActiveModel::Validations
attr_accessor :email
validates :email, rfc_compliant: true
end
describe RfcCompliantValidator do
subject { SpecRecord.new }
it { is_expected.to allow_value('test@example.com').for(:email) }
it { is_expected.to allow_value('disposable.style.email.with+symbol@example.com').for(:email) }
it { is_expected.to allow_value('other.email-with-dash@example.net').for(:email) }
it { is_expected.to allow_value('x@example.org').for(:email) }
it { is_expected.to allow_value('test@example.123-online.tv').for(:email) }
it { is_expected.to allow_value("0123456789#!$%&'*+-/=?^_`{}|~@example.org.co.uk").for(:email) }
it { is_expected.to_not allow_value('john316').for(:email) }
it { is_expected.to_not allow_value('test@example..com').for(:email) }
it { is_expected.to_not allow_value('this\ still\"not\\allowed@example.com').for(:email) }
it { is_expected.to_not allow_value('test@ex:amp,le.com').for(:email) }
it { is_expected.to_not allow_value('t:est@example.com').for(:email) }
it { is_expected.to_not allow_value('te,st@example.com').for(:email) }
it { is_expected.to_not allow_value('te()st@example.com').for(:email) }
it { is_expected.to_not allow_value('te[]st@example.com').for(:email) }
it { is_expected.to_not allow_value('te<>st@example.com').for(:email) }
it { is_expected.to_not allow_value('te"st@example.com').for(:email) }
it { is_expected.to_not allow_value("test@exampledotcom").for(:email) }
it { is_expected.to_not allow_value("testexample").for(:email) }
it { is_expected.to_not allow_value("test@example.com123").for(:email) }
it { is_expected.to_not allow_value("78901234567890123456789012345678901234567890123456789012345678901212+x@example.com").for(:email) }
end
在rails_helper
我定义了以下内容:
Shoulda::Matchers.configure do |config|
config.integrate do |with|
# Choose a test framework:
with.test_framework :rspec
# Choose one or more libraries:
# with.library :active_record
with.library :active_model
with.library :action_controller
# Or, choose the following (which implies all of the above):
# with.library :rails
end
end
在我利用allow_value的其他测试中,测试似乎正常,但由于某些原因allow_value
在这里找不到。有什么想法吗?
答案 0 :(得分:2)
allow_value
是<button type="button" class="btn btn-primary save" data-dismiss="modal">Save</button>
模块的一部分,用于范围界定。
此模块是否包含在测试范围内取决于被测对象是否通过传递给describe块的选项Shoulda::Matchers::ActiveModel
标记为:model
对象。{{ 3}}和Source
由于您的规范未将type
标记为RfcCompliantValidator
,因此这些方法未包含在测试范围内。
要解决此问题,您需要做的就是将其标记为
:model
并且describe RfcCompliantValidator, type: :model do
###
将在您的测试中可用。