我写了一个Ruby Gem,业务中的其他团队需要在Python和C#中实现相同的功能。
我想针对其他语言的代码运行现有的规范。虽然这听起来像是一个难题,但gem的功能仅限于格式化日志。规格如下:
var showDiv = function() {
document.getElementById("welcome").style.display = "block";
localStorage.setItem("greeting", "true")
}
setTimeout(showDiv, 5000); // 5 second delay in MS.
因此,整个测试套件可以简化为一组期望,其中输入是字符串和散列,输出是字符串。
似乎应该很容易编写一个连接器,允许RSpec与另一种语言的代码实例通信。
一些可能性包括使用HTTP或TCP,但我认为这会在规范和应用程序中引入重要的代码和复杂性。
那么,是否有既定的模式或工具可以做到这一点?
答案 0 :(得分:1)
一种快速而又脏的方法就是执行这样的python代码:
%x(python -c "print 'hello I\\'m a logger'").include?('hello')
#=> true
有关更高级的示例,您可以使用IO.popen
或Open3
:
require 'open3'
def run_python(code)
Open3.popen3("python -c \"#{code}\"") do |stdin, stdout, stderr, wait_thr|
{stdout: stdout.read, stderr: stderr.read}
end
end
ten_warnings = %q|import logging
for i in range(10):
logging.warning('Warning %d' % i)
|
describe 'Logger' do
specify 'success' do
expect(run_python(ten_warnings)[:stderr]).to include "Warning 5"
end
end
输出:
.
Finished in 0.0266 seconds (files took 0.1499 seconds to load)
1 example, 0 failures