тестирование с Rails Rspec - ожидаемое и полученное не совпадают - PullRequest
0 голосов
/ 10 января 2019

Я довольно новичок в Rspec с Rails. Я просто пытаюсь запустить несколько тестов, чтобы посмотреть, был ли сохранен новый пользователь и введены ли имя, адрес электронной почты и пароль, но по какой-то причине он не работает, так как тесты не проходят. Я иду по этому видео на YouTube https://www.youtube.com/watch?v=71eKcNxwxVY. Я скопировал все, кроме того, что я не использовал эшафот. Я сделал пользовательскую модель самостоятельно. спасибо

class User < ApplicationRecord
  validates :name, presence: true
  validates :email, presence: true
  validates :password, presence: true
end

rspec

User
  validation tests
    ensures name presence (FAILED - 1)
    ensures email presence (FAILED - 2)
    ensures password presence (FAILED - 3)
    should save (FAILED - 4)

Failures:

  1) User validation tests ensures name presence
     Failure/Error: expect(user).to eq()
     
     ArgumentError:
       wrong number of arguments (given 0, expected 1)
     # ./spec/models/user_spec.rb:7:in `block (3 levels) in <top (required)>'

  2) User validation tests ensures email presence
     Failure/Error: expect(user).to eq(false)
     
       expected: false
            got: #<User id: nil, name: "ben", email: nil, password: "123123", created_at: nil, updated_at: nil>
     
       (compared using ==)
     # ./spec/models/user_spec.rb:12:in `block (3 levels) in <top (required)>'

  3) User validation tests ensures password presence
     Failure/Error: expect(user).to eq(false)
     
       expected: false
            got: #<User id: nil, name: "ben", email: "ben@ben.com", password: nil, created_at: nil, updated_at: nil>
     
       (compared using ==)
     # ./spec/models/user_spec.rb:17:in `block (3 levels) in <top (required)>'

  4) User validation tests should save
     Failure/Error: expect(user).to eq(true)
     
       expected: true
            got: #<User id: nil, name: "ben", email: "ben@ben.com", password: "123123", created_at: nil, updated_at: nil>
     
       (compared using ==)
     
       Diff:
       @@ -1,2 +1,8 @@
       -true
       +#<User:0x00007fa8efdbb628
       + id: nil,
       + name: "ben",
       + email: "ben@ben.com",
       + password: "123123",
       + created_at: nil,
       + updated_at: nil>
       
     # ./spec/models/user_spec.rb:22:in `block (3 levels) in <top (required)>'

Finished in 0.02486 seconds (files took 1.43 seconds to load)
4 examples, 4 failures

Failed examples:

rspec ./spec/models/user_spec.rb:5 # User validation tests ensures name presence
rspec ./spec/models/user_spec.rb:10 # User validation tests ensures email presence
rspec ./spec/models/user_spec.rb:15 # User validation tests ensures password presence
rspec ./spec/models/user_spec.rb:20 # User validation tests should save

RSpec.describe User, type: :model do
  context 'validation tests' do
    it "ensures name presence" do
        user = User.new(email: "ben@ben.com", password: "123123")
        expect(user).to eq(false)
    end

    it 'ensures email presence' do
        user = User.new(name:"ben", password: "123123")
        expect(user).to eq(false)
    end

    it 'ensures password presence' do
        user = User.new(email: "ben@ben.com", name: "ben")
        expect(user).to eq(false)
    end

    it 'should save' do
        user = User.new(email: "ben@ben.com", name: "ben", password: "123123")
        expect(user).to eq(true)
      end
end
end

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Поскольку вы проверяете действительность объекта User, попробуйте использовать метод valid?. Если пользователь недействителен, то user.valid? вернет false. Если он действителен, то он вернет true.

Вот пример

    it 'ensures email presence' do
      user = User.new(name:"ben", password: "123123")
      expect(user.valid?).to eq(false)
    end

для проверочных тестов вы также можете использовать musta-matchers .

0 голосов
/ 11 января 2019

При написании тестов вы сравниваете весь объект пользователя. Вместо этого вы должны сравнить атрибут, который вы ищете. Попробуйте что-то вроде этого:

it "ensures name presence" do
  user = User.new(email: "ben@ben.com", password: "123123")
  expect(user.name).to be_nil
end

Как видите, я добавил expect(user.name) вместо expect(user). Кроме того, для вашей информации, когда вы используете .new , он фактически не сохраняет экземпляр.

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