Rails 5.1 ControllerTest即使在前端工作也不会创建新条目

时间:2017-09-29 12:44:55

标签: ruby-on-rails

我使用Rails 5.1并且在简单的控制器测试方面遇到了一些麻烦。

我用脚手架创建了一个非常标准的Rails应用程序:

  

rails g scaffold产品名称:字符串描述:文本   image_url:字符串价格:十进制

所有CRUD操作都按预期工作。

但是我的控制器测试让我很头疼:

我在app / assets / images文件夹中有引用的测试图像文件。

在test / controllers / products_controller_test.rb中:

require 'test_helper'

class ProductsControllerTest < ActionDispatch::IntegrationTest
  setup do
    @product = products(:one)
    @update = {
      title:       ' Lorem ipsum     ',
      description: ' Rails is great! ',
      image_url:   ' rails.png       ',
      price:       19.99
    }
  end

  test "should create product" do
    assert_difference('Product.count') do
      post products_url, params: { product: @update }
    end

    assert_redirected_to product_url(Product.last)
  end
end

在app / models / product.rb中:

class Product < ApplicationRecord
  validates :title, :description, :image_url, presence: true
  validates :price, numericality: {greater_than_or_equal_to: 0.01}
  validates :title, uniqueness: true
  validates :image_url, allow_blank: true, format: {
    with: %r{\.(gif|jpg|png)\Z}i,
    message: 'must be a URL for GIF, JPG or PNG image.'
  }
end

在test / fixtures / files / products.yml中:

one:
  title: MyString
  description: MyText
  image_url: rails.png
  price: 9.99

two:
  title: Foo
  description: Bar
  image_url: MyString.png
  price: 9.99

我收到的错误消息是:

Failure:
ProductsControllerTest#test_should_create_product [myapp/test/controllers/products_controller_test.rb:25]:
"Product.count" didn't change by 1.
Expected: 3
  Actual: 2

看起来我的测试无法创建新的产品条目。我该如何解决?

1 个答案:

答案 0 :(得分:2)

' rails.png '不符合image_url验证的格式,请检查here

如果您希望为产品创建新记录,请考虑删除空格或调整正则表达式。这样就可以了:

@update = {
  title:       ' Lorem ipsum     ',
  description: ' Rails is great! ',
  image_url:   'rails.png',
  price:       19.99
}