我的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" => "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
还值得一提的是应用程序功能也正确。我希望套房能够通过。
任何人都对正在发生的事情有所了解吗?
答案 0 :(得分:4)
每当测试单独工作,但在其他测试中失败时,您就会遇到测试订购问题。一些早期的测试正在改变全局状态并将其保留,这会对此测试产生负面影响。
我创建了一个小工具来帮助我在自己的套件中找到订购问题:rspec-search-and-destroy。它将采用您的测试套件并将其平分,直到找到一个设置错误全局状态的测试。当然,您可以自己手动执行此操作,但希望该工具可以自动化苦差事。
一旦找到了早期的测试,那么您需要检查它以确定正在设置的全局状态以及如何正确地将该更改沙箱改为仅需要它的测试。