0

我在我们的大型代码库中发现了许多规范(有些甚至是我的 :),它们忘记包含.should并在没有测试任何东西时通过了。

例如

describe FooController, behavior_type: :controller do
  before do
    post :create, foo: { bar: 100 }
  end

  it "doesn't really test anything"
    response.body == "{\"result\":\"excellent\"}"
  end
end

无论 的内容如何,​​该规范都将通过,response.body因为没有使用 RSpec 匹配器。

我的问题是:是否有 RSpec 选项或 gem 或其他东西可以检测规范何时完成而无需使用任何 RSpec 匹配器,也无需调用pending并引发错误或将规范标记为失败或其他状态以提醒开发人员注意这一事实规范没有做他们可能认为的那样?

一个后续问题是:这不应该是 RSpec 的默认行为吗?是否存在您希望能够编写不使用匹配器且不调用的规范的用例pending

FWIW:我知道 RSpec 有一个--warnings选项,它可能会或可能不会打印有关此类场景的警告。在实践中,尽管对于我们的主要项目,它会打印数千行不相关的警告,其中许多是关于第三方 gem 等的。

4

1 回答 1

1

没有 RSpec 选项或 gem,但在https://github.com/rspec/rspec-core/issues/759https://github.com/rspec/rspec-core/issues/404https://github.com/rspec/rspec-core/issues/740自己做这个。

至于这是默认行为,RSpec 团队的现任和前任领导人在上述问题线程中都反对它。

有关不希望失败的用例,请参见问题 404。

于 2014-01-07T02:49:26.737 回答