Spezifikationen für PUT zu einem benutzerdefinierten Pfad/Modell schreiben

Ich arbeite an einem Plugin, das ein Modell hinzufügt. Ich versuche, Spezifikationen zu schreiben, die testen, ob sich das Modell (und der Controller?) wie erwartet verhalten.

Dieser Code in einer Ansible-Bibliothek führt erfolgreich ein PUT an diesen Pfad aus und aktualisiert ein Feld im Modell/Datensatz:

    headers = {
        'Api-Key': discourse_api_key,
        'Api-Username': discourse_api_username,
    }

    payload = {
        "server[request_status]": status
    }
    url = "%spfaffmanager/servers/%s" % (discourse_url, server_id)

    # raise Exception(url) 
    result = requests.put(url, data=payload, headers=headers)

Dies ist die Spezifikation, die ich schreiben möchte, um Updates an diesem Pfad zu testen. Ich bin verwirrt, weil ich eine Unmenge von puts-Aufrufen im Controller habe, von denen keiner etwas ausgibt, obwohl puts im Modell (z. B. in einer Funktion, die von before_save aufgerufen wird) in den Ausgaben von rake autospec sichtbar sind.

Meine beste Vermutung ist, dass ich bei folgendem Code etwas falsch mache:

# frozen_string_literal: true
require 'rails_helper'

describe Pfaffmanager::ServersController do
  fab!(:user) { Fabricate(:user) }
  fab!(:admin) { Fabricate(:admin) }
  fab!(:another_user) { Fabricate(:user) }
  fab!(:trust_level_2) { Fabricate(:user, trust_level: TrustLevel[2]) }
  before do
    Jobs.run_immediately!
  end

  it 'can update status' do
    request_status = 'new status'
    sign_in(admin)
    s=Pfaffmanager::Server.createServerFromParams(user_id: user.id,
        hostname: 'bogus.invalid' , request_status: 'not updated')
    puts "can update status created server id: #{s.id}"
    params = {server: {request_status: request_status}}
    
    expect {
        put "/pfaffmanager/servers/#{s.id}", params: params
    }.to change { s.request_status }
    expect(response.status).to eq(200)
    expect(s.request_status).to eq('new status')
  end
end

Ich habe gestern fast den ganzen Tag damit verbracht und würde mich über Hinweise zu Lösungen oder Techniken zum Debuggen freuen.

Wenn s=Pfaffmanager::Server.createServerFromParams(user_id: user.id, hostname: 'bogus.invalid' , request_status: 'not updated') das von dir erstellte Modell ist, musst du es möglicherweise für den Request-Test fabrizieren, damit er ordnungsgemäß funktioniert – ähnlich wie die Benutzer in deinem Beispiel zuvor fabriziert wurden.

Ach so. Könnte es sein, dass mein Problem darin besteht, dass ich es fabriziere, anstatt es tatsächlich zu erstellen? In den anderen Tests verwende ich beispielsweise den obigen Code, um einen Server zu erstellen, führe dann einen get-Aufruf durch, um die Liste der Server abzurufen, und überprüfe, ob ein Server mit dem korrekten Hostnamen existiert und ob die richtige Anzahl an Servern zurückgegeben wird.

Es wäre jedoch wahrscheinlich sinnvoll herauszufinden, wie man einen auf die „richtige

Ich habe mein Problem (oder zumindest eines davon) gelöst. Wenn du in deiner model.rb-Datei Fehler hast, wie z. B. etwas, das versucht, variable_that_is_nil['xxx'] auszuführen, schlägt das Modell fehl, aber du siehst keine Fehler in den Spec-Logs, wie du es im Rails-Log tun würdest, wenn du mit einem Browser „testen