ruby – RSpec嘲笑:每个块
发布时间:2020-12-17 04:32:14 所属栏目:百科 来源:网络整理
导读:我想使用RSpec模拟为块提供固定输入. ruby: class Parser attr_accessor :extracted def parse(fname) File.open(fname).each do |line| extracted = line if line =~ /^RCS file: (.*),v$/ end endend RSpec的: describe Parser before do @parser = Pars
我想使用RSpec模拟为块提供固定输入.
ruby: class Parser attr_accessor :extracted def parse(fname) File.open(fname).each do |line| extracted = line if line =~ /^RCS file: (.*),v$/ end end end RSpec的: describe Parser before do @parser = Parser.new @lines = mock("lines") @lines.stub!(:each) File.stub!(:open).and_return(@lines) end it "should extract a filename into extracted" do linetext = [ "RCS file: hello,vn","bla bla blan" ] # HELP ME HERE ... # the :each should be fed with 'linetext' @lines.should_receive(:each) @parser.should_receive('extracted=') @parser.parse("somefile.txt") end end 这是一种通过将固定数据传递到其中来测试块内部正常工作的方法.但我无法弄清楚如何使用RSpec模拟机制进行实际喂食. 更新:看起来问题不是使用linetext,而是使用: @parser.should_receive('extracted=') 这不是它被调用的方式,用红色代码替换它,self.extracted =有点帮助,但不知何故感觉不对. 解决方法
我没有配备Ruby& RSpec可以检查这个,但我怀疑你需要在should_receive(:each)的末尾添加对and_yields调用[1]的调用.但是,您可能会发现在这种情况下不使用模拟更简单,例如您可以从File.open存根返回包含linetext的StringIO实例.
[1] http://rspec.rubyforge.org/rspec/1.1.11/classes/Spec/Mocks/BaseExpectation.src/M000104.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |