6

我有一个基于 Rails 4 文档的简单控制器测试(使用 Test::Unit):

test "should create user" do
  assert_difference('User.count') do
    post :create, user: users(:sample_user)
  end
  assert_redirected_to user_path(assigns(:user))
end

而且,尽管实际用户创建得很好,但测试失败了,说:

1) 错误:UsersControllerTest#test_should_create_user: NoMethodError: undefined method permit' for "832959492":String app/controllers/users_controller.rb:23:inuser_params' app/controllers/users_controller.rb:8:in create' test/controllers/users_controller_test.rb:11:inblock (2 levels) in 'test/controllers/users_controller_test.rb:10:in `block in'

出于某种原因,测试无法识别新的 Rails 4permit方法。现在,我user_params在控制器中有一个私有方法。但是,我尝试将其移至实际create操作并收到相同的错误。用户创建也是 100% 标准的(一点也不疯狂——就像 Rails 文档一样)。

有谁知道我如何重写或以其他方式使这个测试通过?

4

1 回答 1

19

似乎正在POST编辑到您的create路线的数据只是一个字符串,而不是属性的散列。做什么users(:sample_user)?它只是一个 ID,还是一个未正确序列化的 ActiveRecord 对象?如果是 AR,也许您需要users(:sample_user).attributes作为有效载荷发送?

于 2013-09-27T02:38:34.833 回答