【发布时间】:2015-01-06 20:25:38
【问题描述】:
我正在尝试使用 Rspec 和 Capybara 来验证生成的 HTML 页面是否没有死链接。大多数(如果不是全部)链接指向同一文件系统上的相关 HTML 页面。
我正在寻找的是这样的:
it 'has no broken links' do
all('a') do |link|
visit link[:href]
# 200 is the Ok HTTP response
page.status.should == 200
end
end
但是,这不会产生任何语法错误,也不会找到实际损坏的链接。我怀疑我的语法有问题,但我不知道为什么 rspec 没有告诉我。
编辑添加:我缺少.each,但修复它只会让我更接近。这是我的代码:
it 'has no dead or broken links' do
all('a').each do |link|
address = link[:href]
if address
if address.downcase.include?('http')
visit address
else
visit '/' + File.dirname(path) + '/' + address
end
# 200 is the Ok HTTP response
expect(page.status).to eq(200)
end
end
end
使用response.status 产生:
undefined local variable or method `response' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fcd1aa8e758>
使用page.status 产生:
undefined method `status' for #<Capybara::Session>
所以,我现在更接近了,但我不知道要检查什么来查看它是否已加载。
第二次编辑:
如果我将期望更改为:
expect(page.title).to_not be_empty
我现在明白了:
Capybara::Webkit::NodeNotAttachedError
不知道这是什么意思。
第三次修改:
我还可以将期望更改为:
expect(page.status_code).to eq(0)
在 irb 中的测试表明 0 是我应该期望成功加载页面的代码。这仍然会导致 Capybara::Webkit::NodeNotAttachedError 结果。如果我删除了visit 逻辑,那么错误就会消失,但当然,那时我不会测试我想要的。
【问题讨论】:
-
规格通过了吗?
-
规范正在通过,但我不知道是否正在访问任何“a”链接。