モデルを追加するプラグインに取り組んでいます。そのモデル(そしてコントローラーも?)が期待通りに動作していることをテストする仕様(specs)を書く試み中です。
この Ansible ライブラリのコードは、このパスに対して正常に PUT リクエストを送信し、モデル/レコードのフィールドを更新しています:
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)
私が書こうとしている、そのパスへの更新をテストする仕様(spec)は以下の通りです。混乱しているのは、コントローラーに無数の puts があるのに、それらが何も出力されないことです。一方、モデル内(例えば before_save で呼び出される関数内)の puts は、rake autospec で表示される出力に含まれています。
私の最善の推測では、以下のコードで何かを間違えているのではないかということです。
# 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
昨日はほぼ一日中これに取り組みました。解決策やデバッグのテクニックに関するヒントがあれば、非常に助かります。