使用let与block参数的RSpec共享_示例
Sandi Metz的“Ruby中的实用面向对象设计”使用Minitest演示如何编写共享测试来测试角色。因此,我正在考虑如何进行RSpec等效。使用let与block参数的RSpec共享_示例,rspec,interface,tdd,Rspec,Interface,Tdd,Sandi Metz的“Ruby中的实用面向对象设计”使用Minitest演示如何编写共享测试来测试角色。因此,我正在考虑如何进行RSpec等效。 车轮起到可测量直径的作用。直径可测量的被定义为响应宽度的对象。到目前为止,我提出了两个不同的版本,使该对象可用于共享示例。哪种方法更好,还是有更好的方法 版本1,使用let: # wheel_spec.rb RSpec.describe Wheel do let(:wheel) { Wheel.new(26, 1.5) } it_behav
车轮
起到可测量直径的作用。直径可测量的被定义为响应宽度的对象。到目前为止,我提出了两个不同的版本,使该对象可用于共享示例。哪种方法更好,还是有更好的方法
版本1,使用let:
# wheel_spec.rb
RSpec.describe Wheel do
let(:wheel) { Wheel.new(26, 1.5) }
it_behaves_like "a diameterizable" do
let(:diameterizable) { wheel }
end
# wheel is available for use ...
end
# diameterizable_interface.rb
RSpec.shared_examples "a diameterizable" do
it "implements the diameterizable interface" do
expect(diameterizable).to respond_to(:width)
end
end
版本2,使用块参数:
# wheel_spec.rb
RSpec.describe Wheel do
let(:wheel) { Wheel.new(26, 1.5) }
it_behaves_like "a diameterizable", Wheel.new
# wheel is available for use ...
end
# diameterizable_interface.rb
RSpec.shared_examples "a diameterizable" do |diameterizable|
it "implements the diameterizable interface" do
expect(diameterizable).to respond_to(:width)
end
end
这似乎是使用隐式主题的好时机:
RSpec.shared_examples "a diameterizable" do
it "implements the diameterizable interface" do
expect(subject).to respond_to(:width)
end
end
RSpec.describe Wheel do
let(:wheel) { Wheel.new(26, 1.5) }
subject { wheel }
it_behaves_like "a diameterizable"
end
顺便说一句,您的第二个版本为共享示例创建了一个新的控制盘
,这可能会产生问题。使用隐式主题似乎非常合适!这使得应用多个“it行为”更容易。