2017-01-20 12 views
0

Предположим, существует ассоциация между writers и books и один из авторов, Джон Пенчил, написал 16 книг. Крепеж 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

+3

Есть ли какой-либо причине вы не можете просто использовать массив? –

ответ

4

Да, не делайте этого. Вместо этого создайте массив книг и используйте его элементы.

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