我有一个简单的脚本,我正在玩(一个Ruby caesars cypher实现),我的方法都不是在Module或Class中编写的。我如何编写Rspec测试来调用这些非示例/类的单独类型方法?
def cypher(string, factor)
string_array = string.downcase.split('')
...
string_array.each do |item|
...
end
puts cyphered_array_alpha.join
end
为简洁起见,省略了方法内容。
测试:
describe "#cypher" do
it "should return characters adjusted by given index" do
expect(cypher("abcd", 1)).to eql('bcde')
end
end
我试过使用{cypher()}
没有任何乐趣。
2条答案
按热度按时间hyrbngr71#
所有Ruby方法都位于特定的模块或类中
当你在顶层定义方法时,你在
Object
中将这个方法定义为私有方法。因此它在任何对象中都可用。通常这是一个坏主意。也许为你的方法(类或模块)使用一些容器并测试这个类或模块会更好
此外,最好定义没有任何输出的方法-只是返回一些值。在这种情况下,您可以在任何地方使用此方法,而不仅仅是在STDOUT中(例如在Web应用程序,电报机器人等)。
然后呢
jvlzgdj92#
我从this有用的RSpec备忘录中了解到,有一些不太常用的,更“高级”的RSpec匹配器,其中之一;
output(...).to_stdout
可以用来评估块输出。虽然没有完整解释如何测试非示例或类方法(也可能是单例方法?),但这个匹配器在我的情况下工作: