ruby-on-rails ruby ruby-on-rails-3 sqlite shoulda

ruby on rails - No se puede obtener un pase de prueba de validación de singularidad con el emparejador de Shoulda



ruby-on-rails ruby-on-rails-3 (2)

Además de lo anterior, un patrón que he usado que lo resuelve:

RSpec.describe AvatarPart, :type => :model describe ''validations'' do let!(:avatar_part) { create(:avatar_part) } it { should validate_uniqueness_of(:some_attribute) } it { should validate_uniqueness_of(:other_attribute) } end end

Tengo un matcha shoulda en mi avatar_parts_spec.rb y no puedo pasarlo:

Prueba:

require ''rails_helper'' RSpec.describe AvatarPart, :type => :model do it { should validate_presence_of(:name) } it { should validate_presence_of(:type) } it { should validate_uniqueness_of(:name).case_insensitive } it { should belong_to(:avatar) } end

Modelo:

class AvatarPart < ActiveRecord::Base attr_accessible :name, :type, :avatar_id belongs_to :avatar validates_uniqueness_of :name, case_sensitive: false validates :name, :type, presence: true, allow_blank: false end

Migración:

class CreateAvatarParts < ActiveRecord::Migration def change create_table :avatar_parts do |t| t.string :name, null: false t.string :type, null: false t.integer :avatar_id t.timestamps end end end

Error:

1) AvatarPart should require unique value for name Failure/Error: it { should validate_uniqueness_of(:name).case_insensitive } ActiveRecord::StatementInvalid: SQLite3::ConstraintException: NOT NULL constraint failed: avatar_parts.type: INSERT INTO "avatar_parts" ("avatar_id", "created_at", "name", "type", "updated_at") VALUES (?, ?, ?, ?, ?)

¿Cuál podría ser la causa del error?

Edición: repositorio de Github: https://github.com/preciz/avatar_parts


La documentación para ese emparejador dice:

Este emparejador funciona de forma un poco diferente a otros emparejadores. Como se señaló anteriormente, creará una instancia de su modelo si aún no existe una. A veces, este paso falla, especialmente si tiene restricciones a nivel de base de datos en cualquier atributo que no sea el único. En este caso, la solución es llenar estos atributos antes de llamar a validate_uniqueness_of .

Entonces en tu caso la solución sería algo como:

describe "uniqueness" do subject { AvatarPart.new(name: "something", type: "something else") } it { should validate_uniqueness_of(:name).case_insensitive } end