为什么反引号命令在测试时首先退出?

时间:2017-06-08 15:45:06

标签: ruby minitest

如果我打开撬并运行

o = `npm outdated`

我得到了我期望的行为,它会阻止所有内容,直到npm命令返回并存储输出。

相同的代码,在测试中:

def get_outdated
 o = `npm outdated`
end

def test_get_outdated
 assert_equal(true, get_outdated().length > 1)
end

失败,因为如果我在返回之前打印o它是空的,我注意到测试运行得更快,因此它不可能等到命令完成。

打印显示没有错误的流程的退出代码。

puts $?.success? #=> true

1 个答案:

答案 0 :(得分:0)

很可能你的环境在测试中与在pry中不同。你可以检查的一件事是你是否安装了任何软件包:

puts `npm ls`

如果没有安装软件包或者所有软件包都已更新,npm outdated会立即返回,没有输出和成功的返回代码。这与您观察到的行为一致。

您也可以尝试运行npm config ls -l来验证您的配置与运行命令的方式相同。