之前运行服务器以在rake任务上运行bash命令

时间:2014-03-20 18:55:28

标签: ruby-on-rails ruby bash rake-task

我正在执行rake任务,以便使用protractor运行测试。在我的任务上,我需要:

  1. 运行网络服务器
  2. 运行Selenium
  3. 运行我的测试
  4. 我的问题是我需要在运行我的测试之前运行Web服务器和Selenium。 这是我的佣金任务:

    #1: run server
    Thread.new { system("bundle exec rails s -p 3001 -e test") }
    next until server_ready? "http://localhost:3001/index"
    
    #2: run Selenium. I'm trying to execute this after web server is running
    Thread.new { system("webdriver-manager start") }
    next until server_ready? "http://localhost:4444/wd/hub/static/resource/hub.html"
    
    #3: run tests. I'm trying to execute this after Selenium is running
    system("protractor ../web/test/protractor.conf.js")
    

    server_ready功能代码。使用此方法,我正在检查Web服务器和selenium是否已启动并正在运行

    def self.server_ready? _url
      begin
        url = URI.parse(_url)
        req = Net::HTTP.new(url.host, url.port)
        res = req.request_head(url.path)
        res.code == "200"
      rescue Errno::ECONNREFUSED
        false
      end
    end
    

    我的问题不是关于Selenium或Protractor,我的问题是如何在运行下一个命令之前等待一个命令

2 个答案:

答案 0 :(得分:1)

我认为你的忙碌"等待循环未正确写入。 尝试类似的事情:

until server_ready?("http://localhost:3001/index") do
  sleep 1
end

而不是下一个。

另一件需要考虑的事情是如何在测试运行后停止服务。

答案 1 :(得分:0)

这是与Protractor有关的问题。我展示的代码毕竟有用......