2015-06-03 8 views
12

folgte ich this tutorial und mein einfacher Test immer mit diesem Fehler„Can not Testtransaktion beginnen, weil wir bereits in einem sind“

1) test /index returns a list of contacts (WorldNote.ChatsControllerTest)            
    test/controllers/chats_controller_test.exs:16                  
    ** (RuntimeError) cannot begin test transaction because we are already inside one         
    stacktrace:                           
     (ecto) lib/ecto/adapters/sql.ex:321: anonymous fn/6 in Ecto.Adapters.SQL.start_test_transaction/3     
     (ecto) lib/ecto/adapters/sql.ex:615: Ecto.Adapters.SQL.pool_transaction/4           
     (ecto) lib/ecto/adapters/sql.ex:314: Ecto.Adapters.SQL.start_test_transaction/3         
     test/controllers/chats_controller_test.exs:9: WorldNote.ChatsControllerTest.__ex_unit_setup_0/1     
     test/controllers/chats_controller_test.exs:1: WorldNote.ChatsControllerTest.__ex_unit__/2  

Der Code ganz

defmodule WorldNote.ChatsControllerTest do 
    use ExUnit.Case, async: false 
    use Plug.Test 
    alias WorldNote.Chats 
    alias WorldNote.Repo 
    alias Ecto.Adapters.SQL 

    setup do 
    SQL.begin_test_transaction(Repo) 

    on_exit fn -> 
     SQL.rollback_test_transaction(Repo) 
    end 
    end 

    test "/index returns a list of contacts" do 
    contacts_as_json = 
     %Chats{fbid: 1234567890, latitude: 0.0, longitude: 0.0, content: "yo"} 
     |> Repo.insert 
     |> List.wrap 
     |> Poison.encode! 

    response = conn(:get, "/api/contacts") |> send_request 

    assert response.status == 200 
    assert response.resp_body == contacts_as_json 
    end 

    defp send_request(conn) do 
    conn 
    |> put_private(:plug_skip_csrf_protection, true) 
    |> WorldNote.Endpoint.call([]) 
    end 
end 

ich in ganz einfach nicht googeln der Fehler cannot begin test transaction because we are already inside one. Aber konnte keine Lösung finden.

PS. Im mit Postgresql

+0

Was war Ihre Lösung für dieses Problem? Ich habe gerade von Phoenix_Ecto 0.3 zu 0.4 aktualisiert und jetzt bekomme ich dieses Problem bei jedem Test :(- sogar in meinem Modelltest, der die Controller nicht verwendet – TheStoneFox

+0

Wie @JoseValim sagte. Entfernen Sie den ganzen Teil mit Testtransaktionen. ExUnit macht es automatisch seit einigen Update –

Antwort

19

Verwenden Sie neueste Phoenix? Wenn ja, soll es test/support/conn_case.ex erzeugt haben, das bereits alle Schritte hat, die erforderlich sind, um Ihre Kontrolltests auszuführen. Sie müssen nur use YourApp.ConnCase in Ihren Tests tun. Der Blogbeitrag wurde geschrieben, bevor die Testinfrastruktur eingerichtet wurde. :)

Das heißt, der Grund ist wahrscheinlich, weil test/test_helper.exs bereits einen Anruf an begin_test_transaction hat.

+0

Yup. Wie immer waren Sie zuerst Jose. Vielen Dank: D –

+0

wunderbar, weniger Standard pro Test –

Verwandte Themen