我有一个项目,在这个项目中,除了在使用共享示例的类中之外,在运行RSpec测试时放置一个binding.pry将会起作用。我们将其设置为有两个块,一个在类本身中处理错误,另一个在共享示例中。结构是这样的(对不起,我不能得到更多的具体信息,有很多代码):
类-> (代码由块包围)
require 'pry'
def class(param, param)
ClassThatTakesBlock.handle() do |_some_event|
rest of class's code...
binding.pry # Fails dramatically when running RSpec
...
end
end
end共享示例-> (代码由块包围)
RSpec.shared_examples 'some class' do |optional_param1, optional_param2|
subject { class(param: param_hash, param: param) }
...
end
end类规范->
RSpec.describe 'directory/class' do
it_behaves_like 'some class', false do
...
end
end问题是,当我需要“撬动”并试图放置一个binding.pry,并运行一个超过该binding.pry的规范时,该规范将抛出一堆错误,并显示类似Failure/Error: subject { class(param: param_hash, param: param) } (共享示例的主题行)的内容。
expected: ("AWS param in class")
got: ("DISABLE_PRY")
Please stub a default value first if message might be received with other args as well.Shared Example Group: "some class" called from ./file_directory/path/class_spec.rb:40
还有一堵很大的墙,看起来像是参数、捆绑路径、rvm标志等。
要让binding.pry在共享示例中工作,我需要做些什么吗?或者,是否有其他方法可以在代码中放置调试器?当我运行RSpec时,我甚至不能让打印语句浮出水面,我也不能调试我的规范。
发布于 2021-03-19 20:54:01
因为关键字class在class中是保留的,所以方法名称ruby导致了这个问题。我的建议是将其命名为klass。
发布于 2021-03-31 02:43:06
我相信我遇到的问题是存根不正确。添加
allow(ENV).to receive(:[])修复了它,但我也认为清除stdout也会导致问题。
https://stackoverflow.com/questions/66692608
复制相似问题