在SSL下运行Rails系统测试会表现出奇怪的行为,我不确定这是错误还是设计使然。
这个非常基础的Example Application进行了一项系统测试,该测试在索引页面上查找元素。
>>> @dataclass
... class XYPoint:
... x: float
... y: float
... def __add__(self, other):
... cls = self.__class__
... return cls(self.x+other.x, self.y+other.y)
...
>>> XYPoint(2,3) + XYPoint(5,7)
XYPoint(x=7, y=10)
>>>
这时,您必须创建一个自签名证书,并指示您的操作系统信任它。
git clone https://github.com/frankjmattia/rails-ssl-system-tests.git blorgh
cd blorgh
./bin/setup
这将生成证书和打印说明,以在Mac OS X或Ubuntu上信任它。这将对./bin/generate-blorgh-cert blorgh.test
,https://blorgh.test
和https://127.0.0.1
https://localhost
进行系统测试
或
rake
以启动服务器,然后导航至rails s
当运行测试通过时,但是在我发出请求之前,Puma抛出了一个错误。
https://localhost:3000
我认为这是从Capybara服务器检查 responsive?
来的,但是我不确定如何证明或解决它。
即使所有测试都在本地通过,它们也可以在SemaphoreCI之类的CI平台上运行时挂起。
如果这是一个错误,那是谁的错误?我倾向于Capybara,但是如果我没有全部事实或无法充分描述它,不想浪费任何人提交错误报告。
答案 0 :(得分:0)
当Capybara在等待服务器启动并确定服务器是http还是https时,它尝试向服务器发出http请求时,OpenSSL将输出SSL“错误”。收到错误后,水豚会以https请求重试。除了输出一条消息外,这实际上不会影响任何错误,并且没有任何理由“错误”会使SemaphoreCI挂起。
如果Semaphore使用的是docker平台,并且您正在运行Chrome> = 73,则可能会发现您需要将命令行选项--no-sandbox
和--disable-features='VizDisplayCompositor'
传递给Chrome,以使其正常运行
答案 1 :(得分:0)
不知道EOFError是什么,尽管它可能与您在请求页面时切换app_host有关(无法保证访问返回时无法完成页面加载)
不这样做可以为我解决问题。在我的情况下,无需将其他选项传递给chromedriver。