Как использовать Насмешки Носорога для Насмешки HttpContext. Приложение

Вот как я это решил:

Blade - Просмотр

@foreach($course->activeLessons as $lesson)
                                    <article class="lesson" >
                                        {!! $loop->iteration!!}.  <a href="{{route('learn.show', $lesson->id)}}"></a>
                                        <div class="body" id="title"> {!! $lesson->title!!}</div>
                                        <p> {!! $lesson->short_description !!}</p>
                                        <div class ="interaction">

                                            <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myCourse" data-myvalue="{{$lesson->title}}" data-myvar="{{$lesson->id}}">
                                                Start lesson
                                            </button>


                                        </div>
                                    </article>
                                @endforeach

                                <div class="modal fade" id="myCourse" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
                                    <div class="modal-dialog" role="document">
                                        <div class="modal-content">
                                            <div class="modal-header">
                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                                                <h4 class="modal-title" id="myModalLabel">Modal title</h4>
                                            </div>
                                            <div class="modal-body">
                                                <span id="modal-myvalue"></span>
                                                <span id="modal-myvar"></span>
                                                <span id="modal-bb"></span>
                                            </div>
                                            <div class="modal-footer">
                                                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                                <button type="button" class="btn btn-primary">Save changes</button>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>

В файле Js

var ATTRIBUTES = ['myvalue', 'myvar', 'bb'];

$('[data-toggle="modal"]').on('click', function (e) {

    var $target = $(e.target);

    var modalSelector = $target.data('target');

    ATTRIBUTES.forEach(function (attributeName) {

        var $modalAttribute = $(modalSelector + ' #modal-' + attributeName);
        var dataValue = $target.data(attributeName);
        $modalAttribute.text(dataValue || '');
    });
});
7
задан Lewis 1 April 2009 в 15:23
поделиться

2 ответа

Не пашущий слишком глубоко, это выглядит главным образом корректным.

Свойство приложения является виртуальным на HttpContextBase, таким образом, необходимо смочь настроить возвращаемое значение для него от Носорога - Предположение, что Вы дразните HttpContextBase, как сообщение Scott Hanselmanns делает.

Некоторые возможные причины, которые являются действительно просто предположениями от отсутствия информации:

  • Вы настраивали возвраты для controllerToTest. ControllerContext?
  • Вы настраивали возврат для этого свойство HttpContext объектов?
  • Вы настраивали возврат для этого, возражает Свойству приложения?

Причина, которую я спрашиваю, состоит в том, что обычно, когда Вы делаете установки ожидания, у Вас уже есть ссылки на объекты, которые назовут как часть Вашего теста, таким образом, Вы не сделали бы, цепочка свойства как Вы делает с Вашим controllerToTest.ControllerContext.HttpContext. Expect() звонить.

Править:

Я думаю, что вижу проблему, и я думаю, что это с этой частью:

Expect(ctx => ctx.Application[Globals.GlobalsKey])

Я думаю, что Вы предполагаете, что индексаторы работают то же свойствами, когда они не делают. То, что действительно необходимо сделать, настраивается ожидание по Вашему appState объект принять вызов к свойству Item, как это:

// setup expectations -- assumes some of the expectations and mocks 
// the from original question
mockHttpBase.Expect(ctx => ctx.Application).Return(appState);
appState.Expect(ctx => ctx.Item(Globals.GlobalsKey)).Return(tmpAppGlobals);

// run the test
1
ответ дан 7 December 2019 в 18:45
поделиться

вы можете использовать нижеприведенное для Moq. Мне потребовалось некоторое время, чтобы издеваться над HttpApplication, а appState.Object - это метод возврата, черт возьми!

public static HttpContextBase FakeHttpContext()
    {
        var context = new Mock<HttpContextBase>();
        var request = new Mock<HttpRequestBase>();
        var response = new Mock<HttpResponseBase>();
        var session = new FakeHttpSessionState();
        var server = new Mock<HttpServerUtilityBase>();
        var appState = new Mock<HttpApplicationStateBase>();

        context.Setup(ctx => ctx.Request).Returns(request.Object);
        context.Setup(ctx => ctx.Response).Returns(response.Object);
        context.Setup(ctx => ctx.Session).Returns(session);
        context.Setup(ctx => ctx.Server).Returns(server.Object);
        context.Setup(ctx => ctx.Application).Returns(appState.Object);

        //emulate session (HttpContext.Current.Session) 
        var contx = new HttpContext(new MyApp.NUnit.Tests.Fakes.FakeHttpWorkerRequest());
        contx.Items["AspSession"] = CreateSession();

        HttpContext.Current = contx;

        return context.Object;
    }
1
ответ дан 7 December 2019 в 18:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: