【发布时间】:2012-02-17 11:32:38
【问题描述】:
目前,我们在控制器中定义了一个动作,我们使用 RSpec 对其进行测试。我们现在需要创建第二个动作,它需要重用第一个动作中包含的大部分功能。
因此,我们将把这个公共代码重构为一个私有方法,然后让两个动作都调用这个私有方法。
问题是,我们在哪里测试这个私有方法的功能?请记住,它正在做很多事情。
我知道我们永远不应该直接测试私有方法,而是测试公共接口,然后再测试私有方法。当然,我们希望保持我们的规范干燥,而不是在每个“描述”中重复所有常见的功能规范,对吗?
示例类:
class MyController < ApplicationController
def action1
...
# Do something unique to 'action1'
...
my_object = ...
do_some_common_stuff(my_object)
end
def action2
...
# Do something unique to 'action2'
...
my_object = ...
do_some_common_stuff(my_object)
end
private
def do_some_common_stuff(my_object)
# Do something common 1
# Do something common 2
# Do something common 3
# Do something common 4
# Do something common 5
end
end
示例测试规范:
describe MyController do
describe "POST 'action1'" do
it "should do something unique to action1"
it "should do something common 1" do
some_object.should_receive(:a_call)
post :action1
end
it "should do something common 2"
it "should do something common 3"
it "should do something common 4"
it "should do something common 5"
end
describe "POST 'action2'" do
it "should do something unique to action2"
it "should do something common 1" do
some_object.should_receive(:a_call)
post :action2
end
it "should do something common 2"
it "should do something common 3"
it "should do something common 4"
it "should do something common 5"
end
end
如您所见,此规范不是很干燥。
有什么指导吗?
【问题讨论】:
标签: ruby-on-rails unit-testing rspec