Ruby Padrino rspec控制器测试始终为绿色

Ruby Padrino rspec控制器测试始终为绿色,ruby,rspec,sinatra,padrino,Ruby,Rspec,Sinatra,Padrino,我正在padrino上用rspec测试控制器,代码如下: 如果我运行测试,一切正常,所有测试都将是绿色的。 问题是这些测试一定会失败!before块上的sign_in_admin不允许用户登录并拨打post电话,如果我更改了线路也不允许 last_response.should_not be_ok 与 考试总是绿色的。。。。。 我不知道我错在哪里 这是我的spec_helper.rb 您的代码总是通过的原因是您的测试采用以下形式: lambda {}.should {} 这相当于 lamb

我正在padrino上用rspec测试控制器,代码如下:

如果我运行测试,一切正常,所有测试都将是绿色的。 问题是这些测试一定会失败!before块上的sign_in_admin不允许用户登录并拨打post电话,如果我更改了线路也不允许

last_response.should_not be_ok

考试总是绿色的。。。。。 我不知道我错在哪里

这是我的spec_helper.rb


您的代码总是通过的原因是您的测试采用以下形式:

lambda {}.should {}
这相当于

lambda {}.should
因为
应该
忽略传递给它的任何块。这进一步等同于:

lambda {}.should be_truthy
它总是成功的,因为
lambda{}
是一个
Proc
,这是真实的

如果您希望
执行该程序以评估副作用(例如引发错误、与其他对象交互),则只应将
发送到
程序
,该副作用的形式为
引发错误
更改
。将块传递给
expect
(当前语法)也是如此

在您的情况下,只需执行当前lambda表达式中的代码,然后检查
last\u response
的值,如下所示:

it '...' do
  post ...
  last_response.should be_ok
end
或者更流行的:

it '...' do
  post ...
  expect(last_response).to be_ok
end
it '...' do
  post ...
  expect(last_response).to be_ok
end