모델을 추가하는 플러그인을 개발 중입니다. 모델(그리고 컨트롤러?)이 예상대로 동작하는지 테스트하는 스펙을 작성하려고 합니다.
다음은 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)
다음은 해당 경로에 대한 업데이트를 테스트하기 위해 작성하려는 스펙입니다. 컨트롤러에 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
어제 하루 종일 이 문제에 매달렸는데, 해결책이나 디버깅 기법에 대한 힌트를 주시면 감사하겠습니다.