Ruby 来自初始值设定项的RSpec double/mock实例变量
我有一个类,在初始化器中,我需要从解析的参数调用实例变量:Ruby 来自初始值设定项的RSpec double/mock实例变量,ruby,rspec,Ruby,Rspec,我有一个类,在初始化器中,我需要从解析的参数调用实例变量: class PrintResults include SortResults attr_accessor :views_hash def initialize(parser) @parser = parser @views_hash = parser.page_views end 我想测试属性访问器,我尝试了以下方法: RSpec.describe PrintResults do subject
class PrintResults
include SortResults
attr_accessor :views_hash
def initialize(parser)
@parser = parser
@views_hash = parser.page_views
end
我想测试属性访问器,我尝试了以下方法:
RSpec.describe PrintResults do
subject { described_class.new(views_hash) }
describe 'attributes accessors' do
let(:accessors) { double(page_views: { '/that_70s_show' => ['111.111.111.111'] }) }
it 'should have views hash' do
subject.views_hash = accessors
expect(subject.views_hash).to eq(['111.111.111.111'])
end
end
但我有一个错误:
1) PrintResults attributes accessors should have views hash
Failure/Error: expect(subject.views_hash).to eq(['111.111.111.111'])
expected: ["111.111.111.111"]
got: #<Double (anonymous)>
(compared using ==)
Diff:
@@ -1 +1 @@
-["111.111.111.111"]
+#<Double (anonymous)>
1)PrintResults属性访问器应具有哈希视图
失败/错误:expect(subject.views_hash).to eq(['111.111.111.111'])
预期:[“111.111.111.111”]
得到:#
(使用==进行比较)
差异:
@@ -1 +1 @@
-["111.111.111.111"]
+#
您可以直接将测试双精度分配给返回的属性,而不是使用初始化
方法
而不是
subject { described_class.new(views_hash) }
describe 'attributes accessors' do
let(:accessors) { double(page_views: { '/that_70s_show' => ['111.111.111.111'] }) }
it 'should have views hash' do
subject.views_hash = accessors
expect(subject.views_hash).to eq(['111.111.111.111'])
end
end
使用
您可以直接将test double分配给返回的属性,而不是使用
initialize
方法
而不是
subject { described_class.new(views_hash) }
describe 'attributes accessors' do
let(:accessors) { double(page_views: { '/that_70s_show' => ['111.111.111.111'] }) }
it 'should have views hash' do
subject.views_hash = accessors
expect(subject.views_hash).to eq(['111.111.111.111'])
end
end
使用
这可能不是你的问题的答案,但这是根据你的规格来考虑的: 在这种粒度级别上进行测试没有多大好处(您需要测试实现的细节)。如果您测试使用这些属性的函数,您将测试这些属性作为副作用。不要过度测试 功能级别的规格说明/测试(单元测试)将简化您的流程和代码设计。因为您的代码已经使用函数进行了模块化,所以使用相同的级别或粒度/命名来组织规范会有所帮助
不要编写与您的实现细节相耦合或泄漏的测试。
< P>这可能不是您的问题的答案,但这是根据您的规格考虑的: 在这种粒度级别上进行测试没有多大好处(您需要测试实现的细节)。如果您测试使用这些属性的函数,您将测试这些属性作为副作用。不要过度测试 功能级别的规格说明/测试(单元测试)将简化您的流程和代码设计。因为您的代码已经使用函数进行了模块化,所以使用相同的级别或粒度/命名来组织规范会有所帮助 不要编写与实现细节相耦合的测试,也不要泄露实现细节