模拟远程服务登录- Cucumber, Capybara, Rails



我有一个Rails应用程序,它已经从通过设计进行用户身份验证更改为访问远程API进行身份验证。对于测试套件,这要求我模拟https请求进行身份验证并返回一个有效的响应。我们正在使用Cucumber和Capybara进行测试,我正在尝试使用webmock Gem来模拟登录响应。

通过单击表单上的按钮(Capybara动作'click_button')启动登录。

不幸的是,尽管webmock似乎安装正确(我能够发出Net::HTTP POST请求,并且webmock能够识别),但是webmock没有捕获到对远程授权设施的POST。我知道表单POST正在向控制器发送,因为堆栈跟踪显示POST正在控制器中执行,错误信息是"Errno::ECONNREFUSED at…打开TCP连接失败

I have try:

WebMock.stub_request(:any, '127.0.0.1').to_return(body: {STATUSCODE: 1}.to_json)

WebMock::stub_request(:any, '127.0.0.1').to_return(body: {STATUSCODE: 1}.to_json)

stub_request(:any, '127.0.0.1').to_return(body: {STATUSCODE: 1}.to_json)

我已经试过把stub_request调用放在device_steps中。Rb文件,就在"click_button"命令,以及在features/support/env。Rb和features/support/webmock。rb文件。

我假设我所做的是如此普遍,它必须是可能的,但我没有发现任何迹象表明为什么stub_request不成功。

那么用于身份验证的远程API的域是localhost?所以它会在同一台服务器上运行,但端口不同?然后,您必须用端口模拟地址。

例如,你的Rails应用程序运行在端口80上,你的认证API运行在8080上,那么你必须这样做。

stub_request(:any, '127.0.0.1:8080').to_return(body: {STATUSCODE: 1}.to_json)

我认为Webmock应该支持不同的端口,但我不是100%确定。

是否也设置了WebMock.disable_net_connect!(allow_localhost: true)

?https://github.com/bblimke/webmock external-requests-can-be-disabled-while-allowing-localhost

编辑:

如果这不起作用,我建议您使API URL可配置,例如在测试中将其设置为auth-api.com,然后模拟此

问题的根本原因是stub_request上的路径不完整。我误读了webmock文档....

相关内容

  • 没有找到相关文章

最新更新