Модульное тестирование показывает действие контроллера с функцией findwhere в Grails - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь показать действие контроллера.Это определение таково:

def show = {
        //scs 11/22/2011 limit access to users in their Organization
        def currentOrgViewCheck = session.currentUserOrganizationId.viewAllPost;
        def currentOrg = session.currentUserOrganizationId;

        def addressesInstance ;
        if(currentOrgViewCheck){
            addressesInstance = Addresses.findWhere(id:Long.parseLong(params.id));
        }else{
            addressesInstance = Addresses.findWhere(id:Long.parseLong(params.id), organization:currentOrg);
        }


        if (!addressesInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'addresses.label', default: 'Addresses'), params.id])}"
            redirect(action: "list")
        }
        else {
            [addressesInstance: addressesInstance]
        }
    }

Я пытаюсь проверить его, высмеивая домен адресов, затем создавая и сохраняя один экземпляр адресов и, наконец, передавая его идентификатор в параметры контроллера.Но тест не проходит.
Также я пытался протестировать метод findWhere на моем методе модульного теста, независимо от того, какие аргументы я ему предоставляю, он постоянно говорит об отсутствии метаданных, что такой сигнатуры для данного типа данных не существует.Я полностью застрял.Вот мой код тестирования:

void testShowFound()
   {
       // New Controller to test
       ac = new AddressesController();

       // this instance is required both to test as well as a session variable
       Organizations org = new Organizations(name:'test', phone: '352-999-8888', createdBy: creator, modifiedBy: modifier, viewAllPost: true);
       org.save();

       //Create an address to pass its id to the action as parameter.
       Addresses a1 = new thlc.Addresses(firstLine:'A1', secondLine:'B', thirdLine:'C', luCountry:UnitedStates, zipCode:'12345', luState:Florida, city:'jag');
       a1.save();   

       ac.metaClass.getParams = {->[id:a1.id] }
       //ac.params.id = a1.id; // I tried both ways.



        // This findWhere is giving error, can any one explain why ?
       //def a = Addresses.findWhere(id:a1.id);
       //assertEquals(a, a1);

       //session variables mocked.
       mockSession['currentUserOrganizationId'] = org;

       // This is to bypass the flash message problem, cause it is not possible to
       // mock the message method on flash messages.
       //ac.metaClass.message = { Map map -> return "ByPass Message" }

       //Call the action and test
       def model = ac.save();
       assert(model);

       //Testing redirect, This is the test that is failing
       assertEquals("list", redirectParams.action);
   } 

Я пробовал большинство вещей, но просто не могу обойти это.что мне не хватает?Спасибо.

1 Ответ

0 голосов
/ 24 января 2012

Похоже, что в Grails 1.3.7 (и ниже) mockDomain не создает динамический искатель findWhere ().Из его звуков вы должны сами издеваться над методом, если хотите его использовать.Я сам еще этого не делал.

Рекомендации:

http://www.slideshare.net/tlberglund/test-first-refresh-second-testdriven-development-in-grails (слайд 38)

http://grails.1312388.n4.nabble.com/New-approach-to-mocking-domain-classes-in-Grails-unit-tests-td2529895.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...