Ich bin neu bei der Verwendung von rspec, also werde ich das hoffentlich richtig erklären. Ich möchte sicherstellen, dass mein Objekt erstellt wird und anschließend sicherstellen, dass ein verwandtes Objekt mit einer has_one
-Beziehung erstellt wird.Testen, ob in rspec eine Verknüpfung existiert
So würde mein Code wie folgt in dem Modell aussehen:
class Device < ActiveRecord::Base
has_one :scan_option
validates_presence_of :name
after_create :create_scan_option
def create_scan_option
self.scan_option.create!
end
end
Ich habe eine Fabrik für ein Gerät:
FactoryGirl.define do
serial_number = SecureRandom.uuid.delete("-")
factory :device do
identifier serial_number
name "Device 1"
is_registered true
timezone "America/Chicago"
end
end
In meinem rspec Modell Test stelle ich mir den Code aussehen würde, dies:
RSpec.describe Device, :type => :model do
it "creates a scan_option after_create" do
subject = build(:device)
# test whether the scan_option object was created and associated with the device?
end
end
ich bin nicht shoulda
oder irgendetwas verwendet wird, nur versucht, Rspec zu verstehen besser.
Gibt es einen Unterschied zwischen "be_present" und "be", wie in einer der Antworten vorgeschlagen? – Godzilla74
'be_present' testet, dass das Aufrufen von' present? 'Auf der' scan_option' 'wahr' aufruft. Während ['be '] (https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers/be-matcher) testet, dass' scan_option 'truthy ist (nicht' nil' oder 'false '). In diesem Beispiel macht es keinen Unterschied im Ergebnis, aber IMO liest es viel besser mit 'be_present'. – spickermann