2015-06-03 4 views
12

ho seguito this tutorial e la mia semplice test non riescono sempre con questo errore"non può iniziare transazione di prova perché siamo già all'interno di uno"

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  

Il codice è abbastanza semplice

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 

Ho cercato su google in tutto l'errore cannot begin test transaction because we are already inside one. Ma non ho trovato alcuna soluzione.

PS. Sto usando Postgresql

+0

Qual è stata la tua correzione per questo problema? Ho appena aggiornato da Phoenix_Ecto a 0,3 a 0,4 e ora sto riscontrando questo problema su ogni test :(- anche nel mio modello di prova che non usa i controller – TheStoneFox

+0

come ha detto @JoseValim. Rimuovere l'intera parte con le transazioni di prova. ExUnit lo fa automaticamente da qualche aggiornamento –

risposta

19

Stai usando l'ultima Phoenix? In tal caso, si suppone che abbia generato test/support/conn_case.ex che ha già tutti i passaggi necessari per eseguire i test del controller. Devi solo fare use YourApp.ConnCase nei tuoi test. Il post del blog è stato scritto prima che l'infrastruttura di test fosse disponibile. :)

Detto questo, il motivo è probabile perché test/test_helper.exs ha già una chiamata a begin_test_transaction.

+0

Sì. Come sempre Sei stato il primo Jose. Grazie mille: D –

+0

meraviglioso, meno boilerplate per test –

Problemi correlati