首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4集成测试数组不存在于控制器内部的json对象中

Rails 4集成测试数组不存在于控制器内部的json对象中
EN

Stack Overflow用户
提问于 2015-06-07 18:00:10
回答 1查看 56关注 0票数 1

我正在尝试创建一个集成测试,用于创建一个名为book的记录。我在测试中创建散列时遇到了问题。这是我的密码:

test/integration/creating_book_test.rb

代码语言:javascript
复制
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

在控制器中,我用以下内容白化这些参数:

代码语言:javascript
复制
  def book_params
    params.require(:book).permit(:title, :year, :review, :rating, :amazon_id, :author_ids, :genre_ids)
  end

问题是我没有在控制器中接收:author_ids和:genre_ids。数组似乎没有被发送到控制器,所以我不能测试关联是否正常工作。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-07 18:02:21

你强烈的附庸声明是错误的。以下是解决办法:

代码语言:javascript
复制
params.require(:book).permit(:title, :year, :review, :rating, :amazon_id, author_ids: [], genre_ids: [])

来自允许标量值文档:

..To声明params中的值必须是允许的标量值数组,将键映射到空数组

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30696737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档