Валидационные тесты в Ruby on Rails всегда ложные - PullRequest
0 голосов
/ 10 сентября 2018

Я пишу некоторые юнит-тесты в Ruby on Rails. Даже когда я ожидаю, что у теста будет результат, который пройдет валидацию, тест не пройден. Вот моя модель, которую я тестирую:

class Post < ApplicationRecord
    def permitted_params
        params.require(:post).permit(:title, :body, :category_id, :admin_user_id)
    end
    belongs_to :category
    belongs_to :admin_user
    has_many :comment, :dependent => :destroy
    validates :title, presence: false
    validates_length_of :body, :minimum => 0
end

Вот мои тесты для этой модели:

class PostTest < ActiveSupport::TestCase
  # test "the truth" do
  #    assert true
  # end
  test "If title is there" do
    post = Post.create(:title => "", :body => "")
    assert post.valid?
  end

  test "If body is long enough" do
    post = Post.create(:title => "Some Title", :body => "hhhhhhhhhhhhhhhhhhhhhhhhh")
    assert post.valid?
  end
end

Это сообщение об ошибке:

F

Failure:
PostTest#test_If_title_is_there [test/models/post_test.rb:9]:
Expected false to be truthy.

Я получаю две ошибки после выполнения теста. Я использую Ruby on Rails версии 5.2.1 и Ruby версии 2.5.1. Любая помощь приветствуется. Я не совсем уверен, почему оба теста не проходят. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Чтобы ответить на ваш вопрос о том, почему оба теста терпят неудачу, я полагаю, что причина в validates :title, presence: false, как указали другие, и я не думаю, что это необходимо здесь.

1) Я считаю, что первоеодин сбой, потому что вы устанавливаете заголовок на пустую строку.Я могу ошибаться, но попробуйте установить его на nil и посмотреть, если он все еще не работает.

2) Как и в первом тесте, вы устанавливаете заголовок, в то время как ваш код ожидает, что он не присутствует, вызываяпроверка также не удалась.

Надеюсь, это помогло прояснить некоторые вещи для вас.

0 голосов
/ 10 сентября 2018

Нет смысла иметь validates :title, presence: false

Скорее всего, вы хотите проверить наличие заголовка, поэтому вы должны иметь presence: true.

Кроме того, я невижу смысл в проверке длины по нулю.

Кроме того, я бы отредактировал ваш код следующим образом, поскольку нет смысла иметь strong_parameters в модели.

class Post < ApplicationRecord
    belongs_to :category
    belongs_to :admin_user

    has_many :comment, dependent: :destroy
    validates :title, presence: false
    validates :body, length: { minimum: 0 }
end

И, наконец, вы можете использовать https://github.com/thoughtbot/shoulda-matchers для более удобного валидационного тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...