2017-12-22 7 views
1

ich ein Benutzermodell mit einer Reihe von BEFORE_SAVE Rückrufe haben - zum Beispiel eine, die führende und nachfolgende Leerzeichen Streifen:Rails Rspec/Factory-Bot aufruft nicht Modell BEFORE_SAVE Rückrufe

app/models/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 

ich habe ein Grundmodell spec, und ich würde überprüfen, dass dieser tatsächlich funktioniert. Zum Beispiel: "Nathan" sollte "Nathan" return

spec/models/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 

Hier ist die Fabrik Definition eines 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 

Allerdings, wenn ich Führen Sie die Tests, schlägt diese Erwartung fehl. Ich überprüfte Postbote (dies ist für eine API), und die Rückrufe werden korrekt ausgeführt, und die Attribute des Benutzers sind ordnungsgemäß festgelegt.

Jede Hilfe, warum dies passiert, oder, wie meine Tests restrukturieren, um zu reflektieren, wie Rspec/Factory Bot tatsächlich funktioniert.

Antwort

2

ändern build zu create wie so:

let(:user) { create :poorly_defined_user }

Wenn build Aufruf, wird das Objekt nicht tatsächlich an die DB gespeichert, so dass die Rückrufe nicht ausgelöst.

+0

Funktioniert perfekt, danke für Ihre Hilfe! –