Ich habe seltsames Testverhalten, wobei der eingeloggte Zustand inkonsistent gehandhabt wird.Warum schlagen diese Tests fehl, wenn sie gleichzeitig ausgeführt werden, obwohl jedes einzeln ausgeführt wird?
Die Spezifikation protokolliert einen Benutzer, besucht eine (verschachtelte oder nicht verschachtelte) Indexseite und überprüft, ob der richtige Inhalt angezeigt wird. Datensätze werden asynchron abgerufen, obwohl ich denke, dass dies keine Auswirkungen haben sollte.
Wenn jede Spezifikation einzeln ausgeführt wird, durchlaufen sie alle. Wenn alle Spezifikationen zusammen ausgeführt werden, schlagen sie fehl, da der erwartete Inhalt fehlt. Die Verwendung von save_and_open_page
zeigt, dass dies darauf zurückzuführen ist, dass die Anmeldeseite gerendert wird und nicht die erwartete Indexseite.
Warum denkt rspec, dass der Benutzer nicht angemeldet ist, wenn alle Spezifikationen zusammen ausgeführt werden, obwohl jede Spezifikation einzeln übergeben wird?
Die Tests in etwa so aussehen
let(:user) {create :user}
let(:team) {create :team}
let(:country) {create :country}
before :each do
login_as(user, scope: :user)
end
describe 'unnested' do
it 'should have the expected content', :js do
visit users_path
is_expected.to have_content "some content on the page"
end
end
describe 'nested by team' do
it 'should have the expected content', :js do
visit team_users_path(team)
is_expected.to have_content "some content on the page"
end
end
describe 'nested by nationality' do
it 'should have the expected content', :js do
visit country_users_path(country)
is_expected.to have_content "some content on the page"
end
end
Die Spezifikationen alle Javascript erforderlich (ich weiß nicht, ob das hier wichtig ist).
Authentifizierung erfolgt durch Devise behandelt, und mein rails_helper.rb
umfasst
config.append_after(:each) do
DatabaseCleaner.clean
Warden.test_reset!
end
Warum glaubt das rspec der Benutzer nicht in, wenn alle Spezifikationen zusammen laufen unterzeichnet werden, doch jede spec einzeln passiert?