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.