在cocoa单元测试目标中运行测试之前运行脚本

时间:2014-01-22 02:21:04

标签: ios objective-c testing mocking

我目前正在测试与JSON API通信的iOS应用。我需要在运行测试之前启动sinatra服务器。服务器作为真实API的模拟器。

有没有办法像这样ruby /path/to/server.rb运行一行脚本?

谢谢

2 个答案:

答案 0 :(得分:4)

转到“Mange Schemes”并选择您的方案,然后展开“Tests”并选择“Pre-actions”并添加新的运行脚本:

enter image description here

选择“从以下位置提供构建设置:”enter image description here

我认为您要查找的变量是${SRCROOT}

答案 1 :(得分:3)

除了@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

config.ru for rackup gem:

require './server'
trap('TERM') {Process.kill 'INT', Process.pid}
puts 'Run sinatra'
run Sinatra::Application