2016-05-05 13 views
1

Spec Helfer:Wie RSpec verwenden, um Erwartungen für Top-Level-Methoden auf einer Sinatra App einzurichten?

def app 
    Sinatra::Application 
end 

App:

require 'sinatra' 

get '/' do 
    track_request 
    "Welcome" 
end 

def track_request 
    puts self.inspect 
    .... 
end 

Wie track_request verspotten?

allow(app).to receive :track_request 
allow_any_instance_of(Sinatra::Application).to receive :track_request 
allow(Sinatra::Application).to receive :track_request 

Keine von diesen funktioniert.

self ist Haupt, also ich denke, wir müssen eine Methode auf Haupt spotten. Aber ich habe nicht herausgefunden, wie es geht.

+0

Es kann einen Unterschied in der Einrichtung der Testumgebung geben. Ich konnte die Methode gut vortäuschen. https://gist.github.com/kgrz/4ea34a6cf79502c3eda678d6760b34b1 – Kashyap

Antwort

0

Vielleicht nicht möglich? (So ​​weit ich bin ratlos)

Nach dieser Blog-Post zu lesen: http://www.philandstuff.com/2012/02/12/surprises-while-testing-sinatra-controllers.html

Es sieht aus wie Sinatra dups Ihre Controller vor einer HTTP-Anforderung verarbeitet.

Aus 'sinatra/base.rb'

# Rack call interface. 
def call(env) 
    dup.call!(env) 
end 

Es scheint, wie dies eine gemeinsame Sache wäre zu tun, wenn eine Sinatra App testen. Ich bin überrascht, dass es keine klare Lösung gibt.

+0

Alles ist möglich. –