2010-05-21 4 views

Répondre

0

J'ai aussi essayé ce (qui doit être nettoyé un peu pour être réutilisable) pour isoler chaque aide dans son propre environnement à tester:

class SinatraSim 
    def initialize 
    ...set up object here... 
    end 
end 

def helpers(&block) 
    SinatraSim.class_eval(&block) 
end 

require 'my/helper/definition' # defines my_helper 

describe SinatraSim do 
    subject { SinatraSim.new(setup) } 

    it "should do something" 
    subject.expects(:erb).with(:a_template_to_render) # mocha mocking 
    subject.my_helper(something).should == "something else" 
    end 
end 
12

je teste mes aides sinatra dans l'isolement en mettant la méthodes d'aide dans son propre module. Depuis mon application sinatra est un peu plus grand que l'habituel bonjour monde par exemple, je dois le diviser en plus petites parties. Un module pour les assistants communs convient bien à mon cas d'utilisation. Si vous écrivez une démo rapide et que vous définissez vos méthodes d'assistance dans le bloc helpers { ... }, je ne pense pas que le tester soit absolument nécessaire. Toute application Sinatra en production, peut nécessiter plus de modularité de toute façon.

# in helpers.rb 
module Helpers 
    def safe_json(string) 
    string.to_s.gsub(/[&><']/) { |special| {'&' => '\u0026', '>' => '\u003E', '<' => '\u003C', "'" => '\u0027'}[special] } 
    end 
end 

# in app.rb 
helpers do 
    include Helpers 
end 

# in spec/helpers_spec.rb 
class TestHelper 
    include Helpers 
end 

describe 'Sinatra helpers' do 
    let(:helpers) { TestHelper.new } 

    it "should escape json to inject it as a html attribute" 
    helpers.safe_json("&><'").should eql('\u0026\u003E\u003C\u0027') 
    end 
end 
Questions connexes