配置 RSpec 以对所有请求规范使用 Capybara.javascript_driver

Posted

技术标签:

【中文标题】配置 RSpec 以对所有请求规范使用 Capybara.javascript_driver【英文标题】:Configure RSpec to use the Capybara.javascript_driver for all request specs 【发布时间】:2012-10-31 20:31:01 【问题描述】:

是否可以全局配置 RSpec 以对所有请求规范使用 Capybara 的(默认或自定义)javascript 驱动程序?我们有时会忘记在每个请求规范中手动添加js: true,这有点烦人。

【问题讨论】:

【参考方案1】:

在 spec_helper.rb 中,设置如下:

  config.before(:each) do
    if example.metadata[:type] == :request
      Capybara.current_driver = :selenium # or equivalent javascript driver you are using
    else
      Capybara.use_default_driver # presumed to be :rack_test
    end
  end

【讨论】:

这行得通,但我想将其限制为请求规格。当然,我可以将这一行放在每个请求规范文件中,但我想全局配置它。有点像您可以为某些规范类型包含特定模块。 rspec 3 是否有类似的解决方法? “示例”现在没有定义【参考方案2】:

对于更高版本的 capybara 和 rspec,检查 type 是否为“feature”很重要

config.before(:each) do
  if [:request, :feature].include? example.metadata[:type]
    Capybara.current_driver = :poltergeist # or equivalent javascript driver you are using
  else
    Capybara.use_default_driver # presumed to be :rack_test
  end
end

或对于 RSpec 3(将 example 传递到块中)

config.before(:each) do |example|
  if [:request, :feature].include? example.metadata[:type]
    Capybara.current_driver = :poltergeist # or equivalent javascript driver you are using
  else
    Capybara.use_default_driver # presumed to be :rack_test
  end
end

【讨论】:

如果你使用 RSpec >= 3,你需要像 config.before(:each) do |example| 这样写第一行以获得相同的行为。更多来自@joshua-muheim:***.com/a/24571607/2948832【参考方案3】:

如果您想一次运行所有测试用例,请参阅此解决方案。

Rspec+Capybara optionally change JS driver

【讨论】:

把相关信息放到帖子里。

以上是关于配置 RSpec 以对所有请求规范使用 Capybara.javascript_driver的主要内容,如果未能解决你的问题,请参考以下文章

RSpec:特性和请求规范有啥区别?

图像显着减慢 Rspec 请求规范

devise 和 rspec-rails - 如何在请求类型规范(带有 type: :request 标记的规范)中登录用户?

Rspec:在路由规范中添加一些头请求

Rspec 2 配置:类型类型

在 rspec 中为 API 规范存根protect_from_forgery