validate_presence_of tests run rails method how have_many cleaner and rspec shoulda

tests - shoulda-matchers RSpec espera sintaxis



undefined method `validate_presence_of'' (2)

Complementaré la respuesta de @peter-alfvin. En caso de que pruebe el modelo y su migración ellos mismos con shoulda-matchers que no puede usar :expect fuera del bloque, por lo que no puede escribir:

RSpec.describe ModelName, type: :model do expect(subject).to belong_to(:user) end

Y obtendrás la expectativa:

`expect` is not available on an example group (e.g. a `describe` or `context` block).

pero la versión correcta es:

RSpec.describe ModelName, type: :model do it { expect(subject).to belong_to(:user) } end

¿Cuál es el formato correcto para usar shoulda-matchers y la nueva sintaxis de expectativa de RSpec?


Si bien uno podría usar los resultados de la nueva sintaxis de expectativa de la siguiente manera:

it ''should validate presence of :email'' do expect(subject).to validate_presence_of :email end

o el más conciso pero menos legible:

it { expect(subject).to validate_presence_of :email }

el formato de una sola línea en el should estos emparejadores se usan normalmente se admite explícitamente en 2.14, incluso cuando config.syntax == :expect . Cuando se está utilizando should con un tema implícito como en:

describe User it { should validate_presence_of :email } end

no se basa en el parche de Kernel que should depender de lo contrario.

Esto se trata en https://github.com/rspec/rspec-expectations/blob/master/Should.md . De hecho, esa documentación incluso usa el ejemplo anterior de matcha para ilustrar esta excepción.

Consulte también Uso de `subject` implícito con` expect ''en RSpec-2.11 , que analiza una opción de configuración que le permite utilizarla como alternativa.

expect_it { to validate_presence_of :email }

Actualización: A partir de RSpec 3.0 (beta2), también podrá utilizar:

it { is_expected.to validate_presence_of :email }