我正在尝试创建一个集成测试,用于创建一个名为book的记录。我在测试中创建散列时遇到了问题。这是我的密码:
test/integration/creating_book_test.rb
require 'test_helper'
class CreatingBookTest < ActionDispatch::IntegrationTest
def setup
@michael_lewis = Author.create!(name: 'Michael Lewis')
@business = Genre.create!(name: 'Business')
@sports = Genre.create!(name: 'Sports')
@analytics = Genre.create!(name: 'Analytics')
end
test "book is created successfully" do
post '/api/books', { book: book_attributes }.to_json, {
'Accept' => 'application/json',
'Content-Type' => 'application/json'
}
... assertions...
end
def book_attributes
{title: 'Moneyball',
year: 2003,
review: 'Lorem Ipsum',
rating: 5,
amazon_id: '10832u13kjag',
author_ids: [@michael_lewis.id],
genre_ids: [@business.id, @sports.id, @analytics.id]
}
end
end在控制器中,我用以下内容白化这些参数:
def book_params
params.require(:book).permit(:title, :year, :review, :rating, :amazon_id, :author_ids, :genre_ids)
end问题是我没有在控制器中接收:author_ids和:genre_ids。数组似乎没有被发送到控制器,所以我不能测试关联是否正常工作。
谢谢。
发布于 2015-06-07 18:02:21
你强烈的附庸声明是错误的。以下是解决办法:
params.require(:book).permit(:title, :year, :review, :rating, :amazon_id, author_ids: [], genre_ids: [])来自允许标量值文档:
..To声明params中的值必须是允许的标量值数组,将键映射到空数组。
https://stackoverflow.com/questions/30696737
复制相似问题