加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何测试部分是否在erb,rspec和capybara中渲染

发布时间:2020-12-17 02:20:20 所属栏目:百科 来源:网络整理
导读:我开始使用rspec,capybara等,我想在Rails中进行一些测试驱动开发. 我正在使用的规范对页眉和页脚的外观有非常精确的定义,我认为这些是开始学习的好地方. 对于页脚,我希望有以下规则: 如果用户已登录,则标题仅包含徽标图像.徽标图像应该是指向用户登录页面的
我开始使用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

第一个可能是由于我使用的语法我不明白,但第二个似乎表明比较是字符串而不是资产.比较图像的语法是什么?有吗?

解决方法

您的类型不匹配错误是因为您将字符串传递给=?这是一个正则表达式匹配器.您可以将字符串更改为正则表达式,也可以使用include.我选择include只是因为它更具可读性:

rendered.should include("/images/mainlogo.png")

要删除弃用警告,只需从模板名称中删除.erb:

render :template => "layouts/_footer.html"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读