Нет данных в базе данных Mongo в среде Play при работе в тестовом режиме

1

У меня есть приложение для работы с файлами v2.2, использующее Mongo Database (с использованием play-jongo). У меня есть класс тестирования в папке /test. Однако, если я запускаю класс unit с помощью test команды или запускаюсь непосредственно из eclipse, данных из всего Mongo DB нет, но если я запускаю приложение нормально, я могу видеть данные. Я использовал Helpers.faceApplication() но до сих пор не имею никаких данных.

Ниже приведен код модульного теста:

@Test
public void test1()  {
    Helpers.running(Helpers.fakeApplication(), new Runnable() {

        @Override
        public void run() {

            //MyUser is the mongo entity
            MyUser myUser = MyUser.findById("123");
            if (myUser != null) {
                Logger.info("User ID: " + myUser.id);
            } else {
                Logger.info("User is NULL");  //it always get here
            }
        }
    });

}

Когда я запускаю тестовый блок, myUser всегда возвращается null.

Я чувствую, что Helpers.fakeApplication не читает /conf/applicaton.conf поэтому он не подключается к mongo db.

Кто-нибудь знает, как подключить игру к mongo db при работе в тестовом блоке?

Теги:
unit-testing
playframework-2.0
jongo

2 ответа

0
Лучший ответ

Оказалось, что я использую старую версию play-jongo (v0.4), которая не поддерживает загрузку существующей базы данных mongo в тестовом режиме. Поэтому я хочу обновить play-jongo до v0.5 (для воспроизведения v2.1.x), изменив зависимость play-jongo в файле /project/Build.scala:

val appDependencies = Seq(
    ...
    "uk.co.panaxiom" %% "play-jongo" % "0.5.0-jongo0.4"
)

Для другой версии игры, пожалуйста, обратитесь к play-jongo readme.md.

Затем в /conf/application.conf я добавил эту строку:

playjongo.test-uri="mongodb://127.0.0.1:27017/mydb"

Поэтому мне нужно обновить play-jongo, потому что старая версия не поддерживает конфигурацию playjongo.test-uri.

0

Просто некоторая информация, которая может быть полезна. Когда вы создаете fakeApplication вы также можете предоставить базу данных для тестирования:

running(fakeApplication(inMemoryDatabase("test")), new Runnable() {
        public void run() {
            // some assertions here
        }
    });

Это, конечно же, будет использовать базу данных H2 in-memory. Я не знаком с Mongo, но с регулярными базами данных SQL я бы попробовал что-то вроде этого:

final Map<String, String> postgres = new HashMap<String, String>();
postgres.put("db.default.driver", "org.postgresql.Driver");
postgres.put("db.default.url", "jdbc:postgresql://localhost/myDataBase");
postgres.put("db.default.user", "postgres");
postgres.put("db.default.password", "password");

running(fakeApplication(postgres), new Runnable() {
        public void run() {
            // some assertions here
        }
});

Надеюсь, это даст вам некоторое представление о том, как действовать с Монго.

  • 0
    Привет, я пробовал таким образом, это не работает. Я использую play-jongo, он не соответствует конфигурации db.default. *. Кстати, вы знаете, как узнать версию игры?
  • 0
    Неважно, я уже нашел это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню