繁体   English   中英

IntegrationTest Ruby on Rails中的assert_select

[英]assert_select in IntegrationTest Ruby on Rails

我来自Python和Java背景,仅具有CSS,HTML,Ruby的基础知识,并且尝试使用Ruby on Rails学习Web开发。 我正在尝试遵循Michael Hartl的教程。 我经常在阅读正确的API或什至了解API在做什么时遇到问题,因为似乎有很多方法可以调用某种方法,并且在那里没有详尽地显示示例。 特别是,我不明白清单7.25中的assert_select方法在做什么参数。

require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest

  test "invalid signup information" do
    get signup_path
    assert_no_difference 'User.count' do
      post users_path, params: { user: { name:  "",
                                         email: "user@invalid",
                                         password:              "foo",
                                         password_confirmation: "bar" } }
    end
    assert_template 'users/new'
    assert_select 'div#<CSS id for error explanation>'
    assert_select 'div.<CSS class for field with error>'
  end
  .
  .
  .
end

通过参考Online API ,如果其中一个使用不带代码块的assert_select ,我们将使用2个参数。 但是,两个示例中的每个示例中只有一个,其中#. ,对于这是某些Rails / Ruby / CSS语法,我不太熟悉,该语法的起源似乎参差不齐。

有人可以启发我,我在这里错过了什么? 我不太熟悉何时使用#和何时使用. ,以及如何“缩短”参数数量。 似乎在_等标点符号上经常有很多地方,此处未显示。

可以使用几种不同的方法调用 assert_select ,包括仅使用CSS选择器,例如您问题中的代码。

CSS选择器可以包含#. 符号。 它们的含义如下:

  • #引用HTML元素ID
  • . 引用CSS类

ID在文档中必须唯一。 因此, div#error会找到以下确切元素: <div id="error">Some error text</div>

另一方面,可以在整个HTML文档中重用类。 因此, div.error将找到所有类似这样的元素: <div class="error">Some error text</div>

最后, #和表示其价值. 在Ruby中也用于区分类和实例方法。 . 表示类方法。 #表示实例方法。 但是,这不是assert_select方法中发生的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM