cuo*_*gtn 1 ruby rspec ruby-on-rails
这些关键字有什么区别。
在下面的例子中,使用expect通过了测试,而is_expected.to失败了。
it { expect validate_uniqueness_of(:access_token) }
it { is_expected.to validate_uniqueness_of(:access_token) }
测试类User,由 Devise 生成
class User < ActiveRecord::Base
devise :lockable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
validates :access_token, uniqueness: true
before_validation :generate_access_token!, on: :create
def generate_access_token!
begin
self.access_token = Devise.friendly_token
end while User.find_by(access_token: self.access_token)
end
end
Run Code Online (Sandbox Code Playgroud)
is_expected_to 只是写作的简短版本
expect(subject).to
Run Code Online (Sandbox Code Playgroud)
你的第一个规范通过了,因为它实际上根本没有测试任何东西。
第二个规范失败,因为没有唯一性验证。尽管您的代码正在处理重复项(但具有与验证相同的竞争条件),但它以不同的方式执行此操作:它生成一个新令牌,而不是报告错误。验证匹配器通常通过检查对象的errors哈希来工作,而您的代码没有设置它,因此规范失败。
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |