關注我有一個用於身份驗證以下控制器關注:RSpec的3.4測試控制器與response.body.read
module ValidateEventRequest
extend ActiveSupport::Concern
def event_request_verified?(request)
sha256 = OpenSSL::Digest::SHA256.new
secret = app_client_id
body = request.body.read
signature = OpenSSL::HMAC.hexdigest(sha256, secret, body)
([signature] & [request.headers['X-Webhook-Signature'], request.headers['X-Api-Signature']]).present?
end
private
def app_client_id
ENV['APP_CLIENT_ID']
end
end
到目前爲止,我有以下Rspec的測試設置,以達到此:
RSpec.describe ValidateEventRequest, type: :concern do
let!(:current_secret) { SecureRandom.hex }
describe '#event_request_verified?' do
it 'validates X-Webhook-Signature' do
# TBD
end
it 'validates X-Api-Signature' do
# TBD
end
end
end
我開始剔除這個請求,然後嘲笑和扼殺,現在我要摧毀我擁有的東西並尋求幫助。 100%的覆蓋率對我來說很重要,我正在尋找一些關於如何構建涵蓋這100%的測試的指針。
所以看起來你學會了比從測試設置軌道以外的語言測試。在rspec中,您不需要以這種方式製作假貨。你可以做「RSpec.describe ValidateEventRequest,輸入::concern do」而不是創建一個假的。我不太瞭解如何測試問題,因爲Ruby社區中的許多人認爲他們是一個糟糕的想法(http://blog.coreyhaines.com/2012/12/why-i-dont-use-activesupportconcern.html,http ://mcdowall.info/the-great-satan-rails-concerns/)。這就是說,如果你像我提到的那樣重構你的測試,你應該能夠按照預期模擬和存根。 –
我第一次嘗試這種方式,並且無法得到存根和嘲笑正常工作....嗯.. –
如果您想更新您的問題與您的舊代碼,並讓我知道您的具體錯誤信息,我可以幫助你通過它。就我個人而言,我認爲你不需要擔心這個問題,我只會採取一個行動之前。 –