如何使用rspec测试我的设计代码?

时间:2018-02-14 04:10:07

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rubygems

这是我的设备单元测试代码。有没有办法编写更好的测试代码?

user_spec.rb:

require 'rails_helper'

    RSpec.describe User, type: :model do

      it { should have_many(:companies) }
      it { should have_many(:jobs) }
      it do
               should validate_length_of(:encrypted_password).
                   is_at_least(6).
                   on(:create)
               end

      it { is_expected.to validate_presence_of(:email) }
      it { is_expected.to validate_presence_of(:encrypted_password) }
      it { should have_db_column(:id) }
      it { should have_db_column(:email) }
      it { should have_db_column(:encrypted_password) }
      it { should have_db_column(:confirmation_token) }
      it { should have_db_column(:confirmed_at) }
      it { should have_db_column(:confirmation_sent_at) }

      it 'is databse authenticable' do
        user = User.create(
           email: 'test@example.com', 
          password: 'password123',
          password_confirmation: 'password123'
        )
        expect(user.valid_password?('password123')).to be_truthy
      end
end

1 个答案:

答案 0 :(得分:1)

好的 - 据我所知,你要问的是测试Rails模型的最佳实践是什么。它由Devise自动生成的事实在很大程度上是无关紧要的。

我在这里要考虑的第一件事是你正在测试的 - 你的大部分代码都在测试Devise的底层实现。这应该不是您的应用程序测试套件的责任 - 该库有一堆测试,应该为您测试。

这里唯一真正有用的测试,IMO,是关联测试(看起来它们来自shoulda-matchers)。这里的其余断言是测试特定于Devise的代码,它将您的测试套件紧密地耦合到第三方库 - 这只会让您陷入更深层次的痛苦世界。