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 }