编写RSpec测试以在端口3000上击中另一个Rails应用

时间:2018-06-25 19:13:27

标签: ruby-on-rails rspec

在我的rails应用程序中,我有一些使用Stalker和Beanstalkd的后端作业。这些工作的一部分是对应用程序的Web界面进行API调用。我想为此作业编写一个端到端的rspec测试,其中被测作业对rails应用程序进行了实际的API调用。

问题是-我总是无法连接到默认的Rails Web端口 $row_count3 = sqlsrv_query($NEI," SELECT Count(Tickets.ID) AS Assigned_Tickets FROM ( (SELECT ID FROM TicketO WHERE TicketO.Assigned = '1') ) AS Tickets ;",array($_GET['ID'])); echo $r ? number_format(sqlsrv_fetch_array($row_count3)['Assigned_Tickets']) : 0; $assigned_tickets = number_format(sqlsrv_fetch_array($row_count3)['Assigned_Tickets']);

    $r = sqlsrv_query($NEI,"
                SELECT Count(Tickets.ID) AS Count_of_Tickets 
                FROM   (
                            (SELECT ID FROM TicketO WHERE TicketO.LID = ?)
                            UNION ALL 
                            (SELECT ID FROM TicketD WHERE TicketD.Loc = ?)
                            UNION ALL
                            (SELECT ID FROM TicketDArchive WHERE TicketDArchive.Loc = ?)
                        ) AS Tickets
            ;",array($_GET['ID'],$_GET['ID'],$_GET['ID']));
            echo $r ? number_format(sqlsrv_fetch_array($r)['Count_of_Tickets']) : 0;    
            $total = number_format(sqlsrv_fetch_array($r)['Count_of_Tickets']);

我正在使用rspec来运行测试-到目前为止,我尝试声明测试的类型为3000Errno::ECONNREFUSED: Failed to open TCP connection to localhost:3000 (Connection refused - connect(2) for "localhost" port 3000) /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:136:in `start_with_connect_without_finish' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:104:in `request' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/net_http_ext.rb:51:in `request' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:210:in `block in transmit' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:123:in `start_without_connect' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/webmock-1.24.2/lib/webmock/http_lib_adapters/net_http.rb:150:in `start' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:206:in `transmit' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:68:in `execute' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/request.rb:35:in `execute' /Users/dalvizu/.rvm/gems/ruby-2.3.3/gems/rest-client-1.6.9/lib/restclient/resource.rb:76:in `put' -这些启动了实际的应用程序服务器并命中了3000端口吗?有什么办法可以在测试中做到这一点?我使用了错误的端口吗?

1 个答案:

答案 0 :(得分:1)

您没有分享很多细节,因此我将尝试给出较高的答案。也许有帮助。

:request规范类型不会为您启动服务器(它旨在测试整个堆栈,包括路由,但不包括实际的HTTP请求)

:feature require的capybara,例如,您使用visit方法发出请求。 Capybara将启动服务器,并将通过无头Chrome或其他客户端发出HTTP请求。但是您的Job可能不知道它应该使用另一台服务器

如果您使用了水豚,则可以获取当前端口,此问题已在问题Cucumber / Capybara -- how to get the host and port of the current execution中进行了说明(如果有帮助,请不要忘了投票) 并找到一种方法将这些信息传递给您要测试的工作。

通常,当您具有异步组件时,很难进行端到端测试。您应该等待后台作业的结果显示多长时间,以及何时failed对其进行声明?

此外,您的工作必须命中HTTP服务器也很奇怪...它应该可以更轻松地访问应用程序对象本身,不是吗?

除非它是不同的应用服务器。然后,您只需要确保其正在运行(作为依赖项)就可以,就像在运行规范之前确保DB服务器正在运行一样。