Je travaille sur un plugin qui ajoute un modèle. J’essaie d’écrire des spécifications pour tester que le modèle (et le contrôleur ?) se comportent comme prévu.
Ce code, situé dans une bibliothèque Ansible, effectue avec succès une requête PUT vers ce chemin et met à jour un champ dans le modèle/enregistrement :
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)
Voici la spécification que j’essaie d’écrire pour tester les mises à jour vers ce chemin. Je suis confus car j’ai des milliers de puts dans le contrôleur et aucun ne s’affiche, alors que les puts dans le modèle (par exemple, dans une fonction appelée par before_save) apparaissent bien dans les logs que je vois avec rake autospec.
Ma meilleure hypothèse est que je fais une erreur dans
# 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
J’ai passé presque toute la journée d’hier sur ce problème et j’apprécierais toute indication sur des solutions ou des techniques de débogage.