在黄瓜上掐Sinatra帮手

问题描述:

我目前正在努力剔除我的一个帮手方法Sinatra应用程序从黄瓜在黄瓜上掐Sinatra帮手

我有一个西纳特拉应用与简单的会话认证(由饼干),我想捻熄了logged_in?辅助方法,为我黄瓜情景把认证。 Sinatra和黄瓜似乎有一个问题关于会议,所以我想只是用摩卡解决这个问题。

但是,我不知道如何从一个Given块中访问Sinatra::Application实例来刷出该方法。

+0

对这些问题完全不熟悉,我只是在问题标题上恭喜你。 – spender 2009-11-25 22:25:31

+0

我应该改变标题以避免非意图双关吗? – Lennart 2009-11-25 22:55:21

您可以通过使用Sinatra::Application.class_eval

编辑得到正确的背景:见楼主的完全解释的答案。

+0

对不起,我想你误解了我的问题。 logged_in?方法已经可以在sinatra应用程序中使用,但是我想将其存储以进行集成测试(无需验证以测试某些工作流程)。主要的问题是我不知道如何从Cucumber步骤中访问我的应用程序的实例。 – Lennart 2009-11-26 08:33:55

+0

我明白了。我想我现在明白了。也许有一些与Sinatra :: Application.class_eval {} – 2009-11-26 09:33:41

+0

是的,这使它的工作。谢谢,我该如何给你提示这个提示?我会回答我自己的问题,以澄清我所做的。 – Lennart 2009-11-26 09:50:29

好像我需要直接重写Before do ... end - 阻塞

所以我结束了放在features/support/文件覆盖我logged_in?current_user方法hooks.rb内我的身份验证机制。

Before do 
    MySinatraApplicationClass.class_eval do 
    helpers do 
     def logged_in? 
     return true 
     end 
     def current_user 
     # This returns a certain Username usually stored 
     # in the session, returning it like 
     # that prohibits different user logins, but for 
     # now this is enough for me 
     "Walter" 
     end 
    end 
    end 
end 

我不得不照顾的唯一的事情,就是在应用程序中没有其他的动作直接从session读,而是使用这些佣工。

不幸的是我认为这种通过黄瓜处理基于会话的Sinatra应用程序的方式已经在其他地方描述过了,我只是认为我的问题不同