gpt4 book ai didi

ruby - 从 RSpec 测试调用的方法启动时,Pry 不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 08:11:25 25 4
gpt4 key购买 nike

我正在尝试将 Pry 与 RSpec 结合使用。目标是能够删除方法中的绑定(bind)并对其进行调试。

这是我的。

lib/play.rb

class Play
def self.hello
print 'Hello world!'
require 'pry'; binding.pry
end
end

规范/play_spec.rb

require_relative '../lib/play'

describe Play do
it 'Play#hello should print message' do
expect {Play.hello}.to output('Hello world!').to_stdout
#require 'pry'; binding.pry
end
end

如果我取消注释规范文件中的绑定(bind)并运行 规范我正在进入 Pry,它的行为符合预期

Frame number: 0/23

From: /Users/iiezhachenko/Documents/Repos/bdd-ruby- playground/spec/play_spec.rb @ line 6 :

1: require_relative '../lib/play'
2:
3: describe Play do
4: it 'Play#hello should print message' do
5: expect {Play.hello}.to output('Hello world!').to_stdout
=> 6: require 'pry'; binding.pry
7: end
8: end

[1] pry(#<RSpec::ExampleGroups::Play>)> ls
RSpec::Core::MemoizedHelpers#methods: is_expected should should_not subject
RSpec::Core::Pending#methods: pending skip
RSpec::Mocks::ArgumentMatchers#methods:

如果我在规范填充中注释掉 binding.pry,将其放入经过测试的方法中并再次调用“rspec”。我正在进入完全困惑的 Pry。

[1] pry(Play)> ls
[2] pry(Play)> fghjk
[3] pry(Play)> kweutyalfh
[4] pry(Play)> exit
F

Failures:

1) Play Play#hello should print message
Failure/Error: expect {Play.hello}.to output('Hello world!').to_stdout

expected block to output "Hello world!" to stdout, but output "Hello world!\n\e[1mFrame number:\e[0m 0/32\n\n\e[1mFrom:\e[0m /Users/iiezhachenko/Documents/Repos/bdd-ruby-playground/lib/play.rb @ line 4 Play.hello:\n\n \e[1;34m2\e[0m: \e[32mdef\e[0m \e[1;36mself\e[0m.\e[1;34mhello\e[0m\n \e[1;34m3\e[0m: print \e[31m\e[1;31m'\e[0m\e[31mHello world!\e[1;31m'\e[0m\e[31m\e[0m\n => \e[1;34m4\e[0m: require \e[31m\e[1;31m'\e[0m\e[31mpry\e[1;31m'\e[0m\e[31m\e[0m; binding.pry\n \e[1;34m5\e[0m: \e[32mend\e[0m\n\n\e[0G\e[1m\e[1;34mPlay.methods\e[0m\e[0m: hello\n\e[1m\e[1;34mlocals\e[0m\e[0m: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_\nNameError: undefined local variable or method `fghjk' for Play:Class\nfrom (pry):1:in `hello'\nNameError: undefined local variable or method `kweutyalfh' for Play:Class\nfrom (pry):2:in `hello'\n"
Diff:
@@ -1,2 +1,17 @@
Hello world!
+Frame number: 0/32
+
+From: /Users/iiezhachenko/Documents/Repos/bdd-ruby-playground/lib/play.rb @ line 4 Play.hello:
+
+ 2: def self.hello
+ 3: print 'Hello world!'
+ => 4: require 'pry'; binding.pry
+ 5: end
+
Play.methods: hello
+locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_
+NameError: undefined local variable or method `fghjk' for Play:Class
+from (pry):1:in `hello'
+NameError: undefined local variable or method `kweutyalfh' for Play:Class
+from (pry):2:in `hello'
# ./spec/play_spec.rb:5:in `block (2 levels) in <top (required)>'

有人遇到过这样的问题吗?

最佳答案

正如 OP 的回答所示,问题涉及控制台输出抑制,这可能会无意中破坏 Pry。

如果您检查您的 spec/spec_helper.rb 文件,RSpec 配置 block 中可能有一些代码引用了 $stderr 和/或 $标准输出。删除这些代码行应该可以解决问题。

有关此输出可能如何被抑制的其他示例,请参阅此问题的答案:Suppress console output during RSpec tests

关于ruby - 从 RSpec 测试调用的方法启动时,Pry 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37238089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com