ruby-on-rails - Rspec Suite 在 OmniAuth 模拟身份验证哈希上失败

标签 ruby-on-rails ruby rspec devise omniauth

我的 Rspec 测试都单独通过,但整个套件失败。

我已将问题范围缩小到使用spec/support/devise.rb中描述的模拟omniauth哈希。 :

OmniAuth.config.test_mode = true

OmniAuth.config.mock_auth[:facebook] = {
  "uid" => "1111",
  "provider" => "facebook",
  "credentials" => {
    "token" => "token",
    "secret" => "secret"
  },
  "extra" => {
    "raw_info" => {
      "name" => "Adam Waite",
      "username" => "adamjwaite",
      "email" => "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6a0b0e0b072a0b0e0b0744090507" rel="noreferrer noopener nofollow">[email protected]</a>"
    }
  }
}

OmniAuth.config.add_mock(:facebook, OmniAuth.config.mock_auth[:facebook])

当我检查OmniAuth.config.mock_auth[:facebook]时在测试失败之前(使用 pry )它返回 :invalid_credentials如果在套件中运行。如果我在单个测试文件中运行相同的测试,它就会像显示的那样显示。

这是我的 UsersController 中注册方法的失败测试:

describe "GET :new" do
  describe "as an unauthenticated user with a facebook omniauth session" do
    before do
      session[:omniauth_facebook] = OmniAuth.config.mock_auth[:facebook]
      get :new
    end
    specify { assigns[:registering_with_facebook].should == true }
    specify { assigns[:registering_with_twitter].should == false }
    specify { response.should be_success }
  end
end

还值得一提的是,该应用程序也可以正常运行。我只是希望套件能够通过。

有人能解释一下发生了什么吗?

最佳答案

每当一个测试单独工作但与其他测试一起失败时,就会遇到测试排序问题。一些早期的测试正在改变全局状态并保持这种状态,这会对这个测试产生负面影响。

我创建了一个小工具来帮助我查找自己套件中的排序问题:rspec-search-and-destroy 。它将获取您的测试套件并将其一分为二,直到找到设置错误全局状态的一个测试。当然,您可以自己手动完成此操作,但希望该工具可以自动完成这项苦差事。

找到早期的测试后,您需要检查它以找出正在设置的全局状态以及如何正确地沙箱化以更改为仅需要它的测试。

关于ruby-on-rails - Rspec Suite 在 OmniAuth 模拟身份验证哈希上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19560007/

相关文章:

ruby-on-rails - FactoryGirl 创建多条记录

ruby-on-rails - 在 ActiveRecord 中,如何在 before_save 回调中使用 'changed'(脏)?

ruby-on-rails - Rails – 如何将文件从本地主机导入到 heroku db

javascript - 如何通过HTTP头正确地将JavaScript对象传递到Rails后端?

ruby - 这些 rvm ruby​​ 版本是什么意思

ruby - 减少 RSpec 中的代码重复

ruby-on-rails - 需要检查文本在页面上出现一次且仅出现一次

ruby-on-rails - 将 Rails 3.2 升级到 Rails 4.2 获得 401 未授权

mysql - 为数据库 Ruby on Rails 配置项目

ruby-on-rails - minitest 测试和代码覆盖率