我正在尝试为我的黄瓜结果编写自定义解析器。在这样做时,我想围绕它编写rspec测试。我目前的情况如下:
describe 'determine_test_results' do
it 'returns a scenario name as the key of the scenario results, with the scenario_line attached' do
pcr = ParseCucumberJsonReport.new
expected_results = {"I can login successfully"=>{"status"=>"passed", "scenario_line"=>4}}
cucumber_results = JSON.parse(IO.read('example_json_reports/json_passing.json'))
pcr.determine_test_results(cucumber_results[0]).should == expected_results
end
end
问题是,determine_test_results
有一个名为determine_step_results
的子方法,这意味着这实际上是两个方法之间的集成测试,而不是determine_test_results
的单元测试。
我如何模仿Determ_step_results的“回复”?
假设determine_step_results返回{“status”=>“已通过”,“scenario_line”=> 4}
我的尝试:
pcr.stub(:determine_step_results).and_return({"status"=>"passed", "scenario_line"=>6})
和
allow(pcr).to receive(:determine_step_results).and_return({"status"=>"passed", "scenario_line"=>6})
答案 0 :(得分:1)
您可以利用存根来实现您想要完成的任务。对于这个特殊情况,Project: RSpec Mocks 2.3会很好。我在下面添加了一些代码作为建议。
describe 'determine_test_results' do
it 'returns a scenario name as the key of the scenario results, with the scenario_line attached' do
pcr = ParseCucumberJsonReport.new
expected_results = {"I can login successfully"=>{"status"=>"passed", "scenario_line"=>4}}
# calls on pcr will return expected results every time determine_step_results is called in any method on your pcr object.
pcr.stub!(:determine_step_results).and_return(expected_results)
cucumber_results = JSON.parse(IO.read('example_json_reports/json_passing.json'))
pcr.determine_test_results(cucumber_results[0]).should == expected_results
end
end
答案 1 :(得分:0)
如果determine_test_results
的所有内容都是determine_step_results
,那么你就不应该对它进行测试,因为它很简单......
如果你决定测试它,你需要测试的是它调用委托函数,并返回传递给它的:
describe ParseCucumberJsonReport do
describe '#determine_test_results' do
it 'calls determine_step_results' do
result = double(:result)
input = double(:input)
expect(subject).to receive(:determine_step_results).with(input).and_return(result)
subject.determine_test_results(input).should == result
end
end
end
如果它正在做更多的事情(比如将结果添加到更大的哈希),你也可以描述它:
describe ParseCucumberJsonReport do
describe '#determine_test_results' do
it 'calls determine_step_results' do
result = double(:result)
input = double(:input)
expect(subject).to receive(:determine_step_results).with(input).and_return(result)
expect(subject.larger_hash).to receive(:merge).with(result)
subject.determine_test_results(input).should == result
end
end
end