Вы, вероятно, знаете это, но средство сопоставления be_foo
вызывает метод foo?
и проверяет его достоверность, поэтому
it "should be invalid" do
expect(invalid_box_shared_link).to_not be_valid
end
будет вызывать только valid?
, и поскольку оно не будет вызывать создание объект - ваша проверка не будет запущена.
Что вам нужно сделать, это что-то вроде:
it "should be invalid" do
expect(invalid_box_shared_link.save).to eq(false) # saving failed
expect(invalid_box_shared_ling.errors).not_to be_empty # saving failed because of validation errors
# you might also want to check the actual error, like
expect(invalid_box_shared_ling.errors).to include(emails: 'validation error message') # I'm guessing what actually the array would include
end