2015-12-07 2 views
0

У меня есть довольно нормальный проект плей-фреймворка, который реализует ряд услуг для отдыха. «Тест активатора» отлично работает из командной строки. Когда я пытаюсь запустить один из тестов в отладчике в IntelliJ 15, один из моих эволюционных баз данных сценариев не удается:Playframework 2.4 эволюция не работает в отладчике

12:34:29.031 [main] ERROR play.api.db.evolutions.DefaultEvolutionsApi - Table "TOKEN" not found;SQL statement: 
alter table "TOKEN" rename to "POS_TOKEN" [42102-187] [ERROR:42102, SQLSTATE:42S02] 

Моего h2/2.sql выглядит следующим образом:

# --- !Ups 
alter table "TOKEN" rename to "POS_TOKEN"; 

drop sequence "TOKEN_SEQ" ; 
create sequence "POS_TOKEN_SEQ"; 

# --- !Downs 
alter table "POS_TOKEN" rename to "TOKEN"; 

drop sequence "POS_TOKEN_SEQ" ; 
create sequence "TOKEN_SEQ"; 

Соответствующие определение h2/1.sql is

create table token (
    id      bigint not null, 
    access_token    varchar(255) not null 
    constraint pk_token primary key (id)) 
; 

Эта эволюция выходит из строя только при работе в отладчике. При запуске приложения с «запуском активатора» шаг 2 эволюции выполняется без ошибок, и таблица переименовывается правильно. Я проверил это с помощью h2-браузера.

Я использую IntelliJ 15 Ultimate Edition. Конфигурация Debug: Class#methodName, VM-arg is -ea, Working dir = $MODULE_DIR$.

Мои юнит-тесты, которые взаимодействуют с dabase все простираться InMemoryDbTest:

public abstract class InMemoryDbTest { 

    protected final String fakeUser = "FakeUser"; 

    public FakeApplication app; 


    @Before 
    public void before() { 
    Map<String, String> inMemoryDatabase = Helpers.inMemoryDatabase("h2"); 
    app = Helpers.fakeApplication(inMemoryDatabase); 
    Helpers.start(app); 
    } 

    @After 
    public void after() { 
    Helpers.stop(app); 
    } 
} 

Я озадачен. Любая помощь в решении этой проблемы приветствуется.

ответ

2

Ключом к этой проблеме было то, что тестовый бегун в IntelliJ был настроен на использование рабочего dir = $ MODULE_DIR $, который в моей настройке равен $ PROJECT_HOME/.idea/modules.

FakeApplication пытается найти скрипт evolutions в $ MODULE_DIR/conf/evolutions/h2/1.sql, не находит его там и переходит к автогенерации на основе последней версии моделей. Позже он запускает эволюцию против базы данных. Сначала он находит новый автогенерированный 1.sql и применяет его, затем пытается запустить созданные вручную 2.sql и последующие шаги. Они терпят неудачу, поскольку исходный 1.sql не является 1.sql в $ APP/conf/evolutions/h2/1.sql, но автогенерируется $ MODULE_DIR $/conf/evolution/h2/1.sql.

Настройка рабочего Dir в конфигурации запуска для теста на пустую строку решает проблему.

+0

Это решило мою проблему. Спасибо, Лейф. –