如何在Rails/Capybara/Cucumber或Rspec中测试帖子

And*_*rej 12 rspec ruby-on-rails cucumber capybara

我正在使用rspec,黄瓜和水豚,我正在寻找一种方法来测试恶意用户无法破解表单然后发布到他/她没有权限的网址.我在cancan中设置了我的权限,这样"应该"可以工作,但是,我可以测试它的唯一方法是自己黑客攻击表单.

如何自动进行此类测试?有了webrat,我可以在rspec的单元测试中做到这一点

put :update, :user_id => @user.id, :id => @user_achievement.id
response.should contain("Error, you don't have permission to access that!") 
Run Code Online (Sandbox Code Playgroud)

然而,在水豚中,访问只是看起来似乎.我找不到办法做到这一点,我已经google了无处不在.

任何帮助将不胜感激,谢谢

Jos*_*ews 8

我认为你可以用机架测试https://github.com/brynary/rack-test来做到这一点

在你的Gemfile中:

gem 'rack-test'
Run Code Online (Sandbox Code Playgroud)

在你的env.rb文件中

module CapybaraApp
  def app; Capybara.app; end
end
World(CapybaraApp)
World(Rack::Test::Methods)
Run Code Online (Sandbox Code Playgroud)

步骤定义:

When /^I send a POST request to "([^"]*)"$/ do |path|
  post path
end
Run Code Online (Sandbox Code Playgroud)

我学到的大部分内容来自这里:http://www.anthonyeden.com/2010/11/testing-rest-apis-with-cucumber-and-rack-test

更新:我认为您可以使用较新版本的Rails和/或Cucumber跳过对env.rb文件的更改(不确定哪个,我只是不在我的新项目上做那部分而且工作正常)

  • 当我这样做时,我失去了路线.我突然开始为#<Cucumber :: Rails :: World:0x81e5b128>(NameError)获取未定义的局部变量或方法`new_user_session_path' (2认同)