在我的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来运行测试-到目前为止,我尝试声明测试的类型为3000
或Errno::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端口吗?有什么办法可以在测试中做到这一点?我使用了错误的端口吗?
答案 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服务器正在运行一样。