ruby-on-rails – 在Rspec中定义类
发布时间:2020-12-17 01:52:48 所属栏目:百科 来源:网络整理
导读:我想测试一个模块包含在一个类中.我正在尝试在RSpec中定义一个新类: describe Statusable do let(:test_class) do class ModelIncludingStatusable ActiveRecord::Base include Statusable statuses published: "опубликовано",draft: "чер
我想测试一个模块包含在一个类中.我正在尝试在RSpec中定义一个新类:
describe Statusable do let(:test_class) do class ModelIncludingStatusable < ActiveRecord::Base include Statusable statuses published: "опубликовано",draft: "черновик" end end describe '#statuses' do it 'sets STATUSES for a model' do test_class::STATUSES.should == ["опубликовано","черновик"] end end end 我收到一个错误: TypeError: [ActiveModel::Validations::InclusionValidator] is not a class/module 这可能是因为在Statusable我有: validates_inclusion_of :status,:in => statuses,:message => "{{value}} должен быть одним из: #{statuses.join ','}" 但如果我发表评论,我会得到: TypeError: ["опубликовано","черновик"] is not a class/module 也许新的类定义不是最好的选择,那我该怎么办?即使不是,我如何在RSpec中定义一个类?我该如何解决这个错误? 解决方法
不要在测试中定义新常量,否则会污染其他测试.相反,使用stub_const.
此外,这是Statusable模块的单元测试.如果ActiveRecord模型不是必需的,最好不要使用它. 您也可以使用class_eval来避免实际打开此类(无论是否为假) describe Statusable do before do stub_const 'Foo',Class.new Foo.class_eval{ include Statusable } Foo.class_eval{ statuses published: "foo",draft: "bar"} end context '#statuses' do it 'sets STATUSES for a model' do FOO::STATUSES.should == ["foo","bar"] end end end 虽然我复制了你的断言,但我建议不要在包含这个模块的类/模块(Foo)中插入一个常量的STATUS.相反,类方法会更好 expect(Foo.status).to eq(["foo","bar"]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |