用rspec测试Ruby模块
发布时间:2020-12-16 22:39:18 所属栏目:百科 来源:网络整理
导读:我在SO / Google这个特殊情况下找不到时间.我有一个模块的功能,为了使用它们,你必须创建一个类,其中包含/扩展模块,如果你想要实例方法或类方法. module A def say_hello name "hello #{name}" end def say_bye "bye" endend 如何使用rspec测试此模块? 我有
我在SO / Google这个特殊情况下找不到时间.我有一个模块的功能,为了使用它们,你必须创建一个类,其中包含/扩展模块,如果你想要实例方法或类方法.
module A def say_hello name "hello #{name}" end def say_bye "bye" end end 如何使用rspec测试此模块? 我有这样的东西,我不知道我应该创建该类并扩展Module的点. describe A do class MyClass extend A end before(:each) { @name = "Radu" } describe "#say_hello" do it "should greet a name" do expect(Myclass.say_hello(@name)).to eq "hello Radu" end end end 谢谢! 解决方法
您可以在测试中创建一个匿名类:
describe A do let(:extended_class) { Class.new { extend A } } let(:including_class) { Class.new { include A } } it "works" do # do stuff with extended_class.say_hello # do stuff with including_class.new.say_hello end end 要在实际代码中看到类似的东西,我已经使用了这个策略为testing my attr_extras lib. 也就是说,包含和扩展是Ruby的标准功能,所以我不会测试每个模块在包含和扩展时是如何工作的 – 通常是给定的. 如果您在测试中创建一个命名类,就像您在问题中所做的那样,我相信在测试运行期间,该类将全局存在.所以这个类会在测试套件的每个测试之间泄漏,可能会导致某处的冲突. 如果您使用let创建一个匿名类,它将只在此特定测试中可用.没有指向它的全局常量可能与其他测试冲突. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |