【问题标题】:Run script before running tests in cocoa unit test target在可可单元测试目标中运行测试之前运行脚本
【发布时间】:2021-06-17 05:36:17
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: ios objective-c testing mocking


    【解决方案1】:

    转到“管理方案”并选择您的方案,然后展开“测试”并选择“预操作”并添加一个新的运行脚本:

    选择“提供构建设置来自:”

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

    【讨论】:

    • 用图片回答让我开心!
    • 你知道我怎样才能访问 ruby​​ 脚本吗?它当前位于 proyect_root/Tests/server.rb 下。是否有任何指向根的环境变量?谢谢
    • 我添加了另一张图片让@Filip 更开心!
    • 我正在运行ruby ${SRCROOT}/Tests/server.rb,但没有运气。关于可能发生什么的任何线索?
    • 您在“提供构建设置”下拉菜单中选择了什么?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 2012-10-10
      • 2018-01-10
      • 1970-01-01
      • 2020-09-22
      相关资源
      最近更新 更多