我在使用 Aruba 写入标准输入时遇到问题。我尝试了三种方法。
方法一:
Scenario: Write to stdin take 1
Given a file named "infile" with:
"""
Hello World!
"""
When I run `cat < infile`
Then the output should contain exactly:
"""
Hello World!
"""
为此,我收到以下错误:
expected: "Hello World!"
got: "Hello World!cat: <: No such file or directory\n" (using ==)
Diff:
@@ -1,2 +1,2 @@
-Hello World!
+Hello World!cat: <: No such file or directory
(RSpec::Expectations::ExpectationNotMetError)
features/cgi.feature:17:in `Then the output should contain exactly:'
Aruba 在字面上传递“<”,而 shell 会用管道做一些魔术。
方法二:
Scenario: Write to stdin take 2
When I run `cat` interactively
And I type "Hello World!"
Then the output should contain:
"""
Hello World!
"""
我收到以下错误:
process still alive after 3 seconds (ChildProcess::TimeoutError)
features/cgi.feature:25:in `Then the output should contain:'
我不知道,但我假设 cat 没有收到 EOF 字符,因此 cat 保持打开状态,等待进一步输入,然后再写入。有什么方法可以表示输入结束?
方法3:
Scenario: Write to stdin take 1
Given a file named "infile" with:
"""
Hello World!
"""
When I run `sh -c "cat < infile"`
Then the output should contain exactly:
"""
Hello World!
"""
这种方法有效,但通过 shell 进程传递输入似乎不是理想的解决方案。
我原以为这是一个相当标准的要求,但还没有成功让它工作。
有什么建议么?
谢谢。