【发布时间】:2021-06-17 05:36:17
【问题描述】:
我目前正在测试一个与 JSON API 通信的 iOS 应用。在运行测试之前,我需要启动一个 sinatra 服务器。服务器充当真实 API 的模拟。
有没有办法运行像ruby /path/to/server.rb 这样的单行脚本?
谢谢
【问题讨论】:
标签: ios objective-c testing mocking
我目前正在测试一个与 JSON API 通信的 iOS 应用。在运行测试之前,我需要启动一个 sinatra 服务器。服务器充当真实 API 的模拟。
有没有办法运行像ruby /path/to/server.rb 这样的单行脚本?
谢谢
【问题讨论】:
标签: ios objective-c testing mocking
转到“管理方案”并选择您的方案,然后展开“测试”并选择“预操作”并添加一个新的运行脚本:
选择“提供构建设置来自:”
我认为您要查找的变量是${SRCROOT}
【讨论】:
ruby ${SRCROOT}/Tests/server.rb,但没有运气。关于可能发生什么的任何线索?
除了@Sebastian 回答之外,请确保在您的 ruby 命令之后添加 & ,因为没有它,sinatra 将阻止您的测试执行。
此外,注意需要终止 ruby 进程的后期操作也很有用。 下面的例子使用 bundler 和 rackup 来启动 sinatra。
预操作脚本示例:
exec > /tmp/tests-pre-actions.log 2>&1
source ~/.bash_profile
SERVER_PATH="${PROJECT_DIR}"/"Server"
cd "$SERVER_PATH"
bundle exec rackup > /tmp/server.log 2>&1 &
#get the PID of the process
PID=$!
#save PID to file
echo $PID > /tmp/sinatra.pid
事后脚本示例:
exec > /tmp/tests-pre-actions.log 2>&1
source ~/.bash_profile
PID=$(</tmp/sinatra.pid)
echo "Sinatra server pid $PID"
kill -9 $PID
用于机架 gem 的 config.ru:
require './server'
trap('TERM') {Process.kill 'INT', Process.pid}
puts 'Run sinatra'
run Sinatra::Application
【讨论】: