2

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

我已将问题缩小到使用以下描述的模拟omniauth哈希spec/support/devise.rb

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" => "adam@adam.com"
    }
  }
}

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

还值得一提的是,该应用程序也可以正常运行。我只想让套房通过。

有人对正在发生的事情有所了解吗?

4

1 回答 1

4

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

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

一旦你找到了之前的测试,那么你需要检查它以找出正在设置的全局状态以及如何正确地将更改沙箱到需要它的测试。

于 2013-10-26T13:59:04.710 回答