У меня проблема с моей переменной @attributes. Я хотел бы, чтобы он был доступен, чтобы мой код оставался сухим, но в настоящее время мне нужно переопределить переменную и установить для нее «значения», чтобы мой тест rspec работал. Как лучше сделать это без дублирования значений.
ref: Неожиданная нулевая переменная в RSpec
Показывает, что он недоступен в описании, но должно быть другое решение. Когда будет уместно «указать»? Я не использовал его.
describe "When one field is missing invalid " do
before(:each) do
@user = create(:user)
@attributes = {"has_car"=>"true", "has_truck"=>"true", "has_boat"=>"true", "color"=>"blue value", "size"=>"large value"}
end
values = {"has_car"=>"true", "has_truck"=>"true", "has_boat"=>"true", "color"=>"blue value", "size"=>"large value"}
values.keys.each do |f|
p = values.except(f)
it "returns invalid when #{f.to_s} is missing" do
cr = CarRegistration::Vehicle.new(@user, p)
cr.valid?
end
end
end
Обновление на основе комментариев: я также хотел бы использовать хэш массива значений в других тестах. Если бы я поместил его в цикл, как указано, мне все равно пришлось бы повторять его в других местах. Любые другие рекомендации?
Обновление: я пытался использовать let(),
describe "When one field is missing" do
let(:user) {Factorybot.create(:user)}
let(:attributes) = {{"has_car"=>"true", "has_truck"=>"true", "has_boat"=>"true", "color"=>"blue value", "size"=>"large value"}}
attributes do |f|
p = attributes.except(f)
it "returns invalid when #{f.to_s} is missing" do
cr = CarRegistration::Vehicle.new(user, p)
cr.valid?
end
end
end
но получить следующую ошибку.
attributes
недоступен для примера группы (например, блока describe
или context
). Он доступен только из отдельных примеров (например, блоков it
) или из конструкций, которые выполняются в рамках примера (например, before
, let
и т. д.).