如何使用迭代和插值创建变量名称?
How to create variables names with iteration and interpolation?
假设 writers
和 books
之间存在关联 (bibliography
),并且其中一位作家 John Pencil 写了 16 本书。
Fixture bibliography.yml
列出所有书籍如下:
association_1:
writer: john_pencil
book: book_1
association_2:
writer: john_pencil
book: book_2
...
我需要测试主页是否显示 J.P. 的全部图书列表。
因此,如果我可以在测试的设置方法中以某种方式使用插值,我可以执行以下操作:
(1..16).each do |num|
book_#{num} = bibliography("association_#{num}".to_sym).book
end
然后我可以测试图书列表是否存在,如下所示:
(1..16).each do |num|
assert_select "td.book_isdn", book_#{num}.isdn
assert_select "td.book_title", book_#{num}.title
assert_select "td.book_genre", book_#{num}.genre
assert_select "td.book_author", book_#{num}.author
end
当然,我不能使用 book_#{num}
,我想知道我是否可以使用一些权宜之计来使插值工作像我对 "association_#{num}".to_sym
所做的那样
是的,不要那样做。相反,创建一个书籍数组并使用它的元素。
books = (1..16).map do |num|
bibliography("association_#{num}".to_sym).book
end
然后
books.each do |book|
assert_select "td.book_isdn", book.isdn
assert_select "td.book_title", book.title
end
假设 writers
和 books
之间存在关联 (bibliography
),并且其中一位作家 John Pencil 写了 16 本书。
Fixture bibliography.yml
列出所有书籍如下:
association_1:
writer: john_pencil
book: book_1
association_2:
writer: john_pencil
book: book_2
...
我需要测试主页是否显示 J.P. 的全部图书列表。
因此,如果我可以在测试的设置方法中以某种方式使用插值,我可以执行以下操作:
(1..16).each do |num|
book_#{num} = bibliography("association_#{num}".to_sym).book
end
然后我可以测试图书列表是否存在,如下所示:
(1..16).each do |num|
assert_select "td.book_isdn", book_#{num}.isdn
assert_select "td.book_title", book_#{num}.title
assert_select "td.book_genre", book_#{num}.genre
assert_select "td.book_author", book_#{num}.author
end
当然,我不能使用 book_#{num}
,我想知道我是否可以使用一些权宜之计来使插值工作像我对 "association_#{num}".to_sym
是的,不要那样做。相反,创建一个书籍数组并使用它的元素。
books = (1..16).map do |num|
bibliography("association_#{num}".to_sym).book
end
然后
books.each do |book|
assert_select "td.book_isdn", book.isdn
assert_select "td.book_title", book.title
end