下面是应用程序控制器文件(application_controller. rb)中的HTTP基本身份验证
before_filter :authenticate
protected
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == "username" && password == "password"
end
end
和我的家庭控制器的索引操作的默认测试(spec/controllers/home_controller_spec. rb)
require 'spec_helper'
describe HomeController do
describe "GET 'index'" do
it "should be successful" do
get 'index'
response.should be_success
end
end
由于身份验证方法的原因,测试没有运行。我可以注解"before_filter:authenticate"来运行它们,但我想知道是否有办法使它们与该方法一起工作。
谢谢大家!
7条答案
按热度按时间sxissh061#
更新(2013年):Matt Connolly提供了一个GIST,它也适用于请求和控制器规范:http://gist.github.com/4158961
如果您有许多测试要运行,并且不想每次都包含它,那么另一种方法是(DRYer代码):
创建一个/spec/support/auth_helper.rb文件:
在测试规范文件中:
信用额度here-Archived site
mrphzbgm2#
对不起,我没有寻求足够的,解决方案似乎是如下:
oyxsuwqo3#
一些答案建议设置
request.env
,这是不安全的,因为请求可以是nil
,而您将以private method env' called for nil:NilClass
结束,特别是在使用rspec -e
运行单个测试时正确的方法是:
ljo96ir54#
对于我来说,使用Rails6时,我需要rspec get方法的关键字参数,如..
get route, params: params, headers: headers
身份验证帮助程序方法
和rspec请求测试。
new9mtju5#
使用Rspec测试GrapeAPI时,可以使用以下语法
其中,有效会话为
以及
7z5jn7bk6#
这些都是控制器和请求规格的很好的解决方案。
对于使用Capybara的特性测试,下面是一个使HTTP Basic身份验证工作的解决方案:
规范/支持/验证时.rb
然后,在规范中:
ep6jt1vc7#
我的解决方案:
使用gem网络模拟
您可以通过更改来加强验证:
URL-可以是正则表达式