Проверьте пользовательскую проверку в RSpe c, которая запускается только при создании - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть пользовательская проверка, которая запускается при создании:

validate :validate_emails, if: :send_email, on: :create

По моему c Я делаю это:

describe "#validate_emails" do
  let(:box_shared_link_2) { BoxSharedLink.new(box_file, link_type: "view", email: "john@doe.com jane@doe.com;johny@doe.com") }
  let(:invalid_box_shared_link) { BoxSharedLink.new(box_file, link_type: "view", email: "john jane;johny@doe.com", send_email: "Update and Send Link") }

  it "should be invalid" do
    expect(invalid_box_shared_link).to_not be_valid
  end

  it "should be valid" do
    expect(box_shared_link_2).to be_valid
  end
end

Как я могу сказать RSpe c Чтобы запустить проверку на создание? Спасибо

1 Ответ

0 голосов
/ 05 мая 2020

Вы, вероятно, знаете это, но средство сопоставления 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
...