我开始使用rspec,capybara等,我想在Rails中进行一些测试驱动开发。
我正在使用的规范对页眉和页脚的外观有非常精确的定义,我认为这些是开始学习的好地方。
对于页脚,我希望有以下规则:
如果用户已登录,则标题仅包含徽标图像。徽标图像应该是指向用户登录页面的链接,该登录页面由用户拥有的权限决定。如果用户未登录,则图像不是链接,并且页面中的页脚也应显示其他四个链接。
在erb中编码这实际上是相当直接的,但我正在努力做正确的事,并在这里进行一系列测试。我的问题是我似乎无法测试屏幕上是否显示图像。我已经阅读了rspec书籍,但我没有看到它在哪里说“在资产目录中显示此图像。”
所以我的设置是在views / layouts目录中, _header.html.erb _footer.html.erb _shim.html.erb application.html.erb
我认为我可以直接测试页脚部分,使用类似:
require "spec_helper"
describe "rendering views/layouts/_footer.html.erb" do
#from https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/view-specs/view-spec
it "shows the logo" do
render :template => "layouts/_footer.html.erb"
rendered.should =~ "/images/mainlogo.png"
end
describe "rendering views/layouts/_footer.html.erb as admin" do
before do
FactoryGirl.create(:admin_user)
end
it "links to landing from the logo"
render :template => "layouts/_footer.html.erb"
rendered.should contain("link/to/admin/landing")
end
end
#repeat landing tests for various user types
然后,在其他页面中,我可以使用类似
之类的东西来测试页脚本身的存在 it should contain("footer")
我的问题是,我甚至无法检查图像是否已显示,更不用说图像与资源目录中的图像匹配了。我该怎么办?
上面用于测试图像存在的代码(只是第一个描述/它阻止,而不是'作为管理员'或'应该包含'的东西)给了我以下警告和错误:
DEPRECATION WARNING: Passing a template handler in the template name is deprecated.
TypeError:
type mismatch: String given
第一个可能是由于我使用的语法我不明白,但第二个似乎表明比较是字符串而不是资产。比较图像的语法是什么?有吗?
答案 0 :(得分:3)
您的类型不匹配错误是因为您将字符串传递给=~
这是一个正则表达式匹配器。您可以将字符串更改为正则表达式,也可以使用include
。我会选择include
,因为它更具可读性:
rendered.should include("/images/mainlogo.png")
要删除弃用警告,只需从模板名称中删除.erb
:
render :template => "layouts/_footer.html"