Ich versuche, einen Test-Pass für Code, der bereits implementiert wurde, zu machen. Ich bin neu in Unit Testing und RSpec und für das Leben von mir kann diesen Fehler nicht herausfinden. Im Grunde versuche ich zu überprüfen, dass JSON an den richtigen Endpunkt gesendet wird. Ich denke, ich habe alle Attribute geschaffen, die ich brauchte, aber ich bekomme immer denselben Fehler. Hier ist der Fehler und mein Code. Es hat eindeutig etwas damit zu tun, die Stadt von einem anderen Modelltisch mitzunehmen, aber ich bin mir nicht sicher, warum es sich beschwert?Rspec - Versucht, nil zu verstehen: NilClass Fehler
Hier ist der Test.
require "rails_helper"
RSpec.describe "/api/retailers" do
describe "GET /api/retailers" do
it "Returns JSON for retailers" do
location = Location.create!(
city: "Portland",
street_1: "Cherry",
state: "Oregon",
zip: "49490"
)
retailer = Retailer.create!(
name: "Good Coffee Co.",
description: "Hipster Good",
image_url: "http://www.example.com/foo_bar.jpg",
)
get "/api/retailers.json"
expect(response).to be_success
json = JSON.parse(response.body)
expect(json["name"]).to eql("Good Coffee Co.")
expect(json["description"]).to eql("Hipster Good")
expect(json["image_url"]).to eql("http://www.example.com/foo_bar.jpg")
expect(json["city"]).to eql(location.city)
end
end
end
Hier ist meine Fehlermeldung
/api/retailers GET /api/retailers Returns JSON for retailers
Failure/Error: location.city
NoMethodError:
undefined method `city' for nil:NilClass
# ./app/models/retailer.rb:8:in `city'
Hier mein Controller ist
class Api::RetailersController < ApiController
def index
@retailers = Retailer.all
render json: @retailers, methods: [:city]
end
end
Hier ist mein Modell
class Retailer < ActiveRecord::Base
has_one :location
has_many :retailer_timeslots
has_many :timeslots, through: :retailer_timeslots
def city
location.city
end
end
Jede Hilfe wäre genial. Ich bin wirklich auf dieses Problem gestoßen. Lassen Sie mich wissen falls andere Informationen notwendig sind.
ich sehen! ja, Irgendeine Idee, was Sie tun würden, um zu beheben? – Bitwise
der Fix ist wie oben von Max und Rodrigo gezeigt. Ich füge meine Antwort hier als Bearbeitung hinzu. –