首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rspec:如何正确测试模板方法模式?

Rspec:如何正确测试模板方法模式?
EN

Stack Overflow用户
提问于 2015-06-26 21:58:05
回答 2查看 180关注 0票数 1

给定两个使用模板方法设计模式的类:

代码语言:javascript
复制
def Parent
  def all_params
    params.merge(extra_params)
  end

  def params
    {blah: "cool"}
  end

  def extra_params
    {}
  end
end

def Child < Parent
  def extra_params
    {edmund: "coolest"}
  end
end

在Rspec中测试它的正确方法是什么?我应该像这样创建shared_examples_for "a parent",然后在两个类中使用it_should_behave_like 'a parent'进行测试吗?

代码语言:javascript
复制
shared_examples_for "a parent" do
  describe "#params" do
    expect(subject.params).to eq (...)
  end

  describe "#all_params" do
    expected_params = subject.all_params.merge(subject.extra_params)
    expect(subject.all_params).to eq expected_params
  end
end

describe Parent do
  subject { Parent.new }
  it_should_behave_like 'a parent'

  describe "#extra_params" do
    expect(subject.extra_params).to eq {}
  end
end

describe Child do
  subject { Child.new }
  it_should_behave_like 'a parent'

  describe "#extra_params" do
    expect(subject.extra_params).to eq {edmund: 'coolest'}
  end
end

或者我应该测试Child是否是父对象,并且只测试它覆盖的钩子方法?

代码语言:javascript
复制
describe Parent do
  subject { Parent.new }
  describe "#params" do
    expect(subject.params).to eq (...)
  end

  describe "#all_params" do
    expected_params = subject.all_params.merge(subject.extra_params)
    expect(subject.all_params).to eq expected_params
  end

  describe "#extra_params" do
    expect(subject.extra_params).to eq {}
  end
end

describe Child do
  subject { Child.new }
  it "is a Parent" do
    expect(subject).to_be kind_of(Parent)
  end

  describe "#extra_params" do
    expect(subject.extra_params).to eq {edmund: 'coolest'}
  end
end
EN

回答 2

Stack Overflow用户

发布于 2015-06-26 22:09:34

这是一个选择的问题。就我个人而言,我为父类创建共享示例,然后为父类创建共享示例,例如Animal

代码语言:javascript
复制
include_examples 'Animal'

例如,对于Badger < Animal

代码语言:javascript
复制
it_behaves_like 'Animal'

第一个将示例包含到当前上下文中,而第二个将示例包装在behaves like Animal上下文中。

票数 0
EN

Stack Overflow用户

发布于 2015-06-27 02:08:14

我更喜欢第二个例子。在Child中使用it_behaves_like "a parent"是重复的,本质上只是测试继承在Child中是否有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31075145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档