У меня проблема с моей переменной @attributes.Я хотел бы, чтобы он был доступен, чтобы сохранить мой код сухим, но в настоящее время я должен пересчитать переменную и установить ее в «значения», чтобы мой тест rspec заработал.Какой лучший способ сделать это без дублирования значений.
ref: Неожиданная переменная nil в 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
и т. Д.).