我来自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 APIs,如果一个人使用不带代码块的assert_select
,我们将使用2个参数。但是,在两个示例中,每个示例中只有#
和.
中只有1个,对于这是Rails / Ruby / CSS语法(语法的起源),我不太熟悉似乎很复杂。
有人可以启发我,我在这里错过了什么?我不太熟悉何时使用#
和何时使用.
,以及如何“缩短”参数的数量。像_
这样的标点似乎总是有很多作用,这里没有显示。
答案 0 :(得分:0)
assert_select
可以是called several different ways,包括CSS选择器,例如您问题中的代码。
CSS selectors可以包含#
和.
符号。这就是他们的意思:
#
引用了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
方法中发生的事情。