关注我有一个用于身份验证以下控制器关注: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/)。这就是说,如果你像我提到的那样重构你的测试,你应该能够按照预期模拟和存根。 –
我第一次尝试这种方式,并且无法得到存根和嘲笑正常工作....嗯.. –
如果您想更新您的问题与您的旧代码,并让我知道您的具体错误信息,我可以帮助你通过它。就我个人而言,我认为你不需要担心这个问题,我只会采取一个行动之前。 –