在标准rails框架中测试unprocessable_entity

问题描述 投票:0回答:1

目标是覆盖以下线路: 如果对象无法保存

render :new, status: :unprocessable_entity

Post belongs_to :user
的类编写测试,例如

    assert_no_difference "Post.count" do
      post posts_path,  params: { post: { user_id: nil }  }
    end
    assert_response :unprocessable_entity

实际上永远不会到达响应阶段,因为

ActiveRecord::RecordInvalid:
将被提前调用。

块测试

assert_response :unprocessable_entity do
生成
NoMethodError: undefined method 'response_code' for nil:NilClass

这个测试似乎有点没有实际意义,因为它会被上游的有效性测试覆盖。尽管如此,对可能绕过验证测试中断的好奇心还是很强烈......

unprocessable_entity可以在标准rails框架下测试吗?

ruby-on-rails minitest
1个回答
0
投票

降落在这里试图测试同样的!我的案例是在创建或更新模型时检查字符串

slug
的唯一性验证
Company

assert_response :unprocessable_entity
适用于我的案例!

也许 OP bug 存在于断言或变量定义的结构中?

这是在我的company_controller_test.rb文件中:

setup do
  # variables defined in companies.yml
  @company = companies(:one)
  @company2 = companies(:two)
end

test "should check unique slug before creating company" do
  assert_no_changes("Company.count") do
    post companies_url, params: { company: { slug: @company2.slug } }
  end

  assert_response :unprocessable_entity
end

# trying to update company1 with company2 slug
test "should check unique slug before updating company" do
  patch company_url(@company.slug), params: { company: { slug: @company2.slug } }
  assert_response :unprocessable_entity
end

test/fixtures/companies.yml
中定义的公司变量:

one:
  slug: CompanyOne

two:
  slug: CompanyTwo
© www.soinside.com 2019 - 2024. All rights reserved.