Rails Rspec / Factory Bot没有调用模型before_save回调

问题描述 投票:1回答:1

我有一个带有许多before_save回调的用户模型 - 例如,一个剥离前导和尾随空格的模型:

应用程序/模型/ user.rb:

def strip_whitespace_in_user_names
  self.first_name.strip!
  self.first_name.gsub!(" ", "")
  self.last_name.strip!
  self.last_name.gsub!(" ", "")
end

我有一个基本的型号规格,我想检查一下这确实有效。例如,“内森”应该返回“内森”

规格/型号/ user_spec.rb:

RSpec.describe User, type: :model do
  let(:user) { build :poorly_defined_user }
  it "has no leading white space" do
    expect(user.first_name).not_to end_with(" ")
  end
end

以下是poorly_defined_user的工厂定义:

require 'faker'
password = Faker::Internet.password
# Factory to define a user
FactoryBot.define do
  factory :poorly_defined_user, class: User do
    first_name "     asd  "
    last_name "AS DF  "
    handle "BLASDF824"
    email Faker::Internet.email
    password password
    password_confirmation password
  end
end

但是,当我运行测试时,此期望失败。我检查了邮递员(这是一个API),回调正确运行,并正确设置用户的属性。

关于为什么会发生这种情况的任何帮助,或者,如何重组我的测试以反映Rspec / Factory Bot实际上如何工作。

ruby-on-rails rspec callback factory-bot
1个回答
2
投票

像这样将build改为create

let(:user) { create :poorly_defined_user }

调用build时,该对象实际上并未保存到db中,因此回调不会触发。

© www.soinside.com 2019 - 2024. All rights reserved.