Передающий веб-контекст к 'сервису' в ASP приложение MVC

Шаблон, который я использую, выглядит следующим образом (хотя я пытаюсь его улучшить),

it('should update last refreshed text', () => {
  cy.contains('selector-closest-to-text', 'signature text')
    .then(els => {
      const before = els[0].textContent;         // #1 parse the text
      expect(before.length).to.be.above(0);      // #2 in case text is empty
      cy.wait(1000)                              // #3 wait a second for new timestamp
      cy.get('selector-for-refresh-trigger')...  // #4 do something to refresh 
      cy.contains('selector-closest-to-text', 'signature text')
        .should('not.contain', before)           // #5 check has actually changed
        .then(els=> {
          const after = els[0].textContent;      // #6 parse again
          expect(after.length).to.be.above(0);   // #7 in case empty
          expect(before).not.to.eq(after);       // #8 compare
        })
    });
});

Примечания:

# 1 - синтаксический анализ текст

В вашем случае немного сложно получить только дату и время. Вы можете просто использовать textcontent, как я, если вы не собираетесь проверять, что другой пользователь обновил расписание, но если вы просто хотите, чтобы дата и время это выражение могли сделать это

const before = els[0].textcontent.split(' ').slice(2).join(' ')

Вы можете извлечь больше, чем просто время обновления, если это так, создайте простую функцию JS за пределами it()

const parseText = (txt) => {
  const split = txt.split(' ')
  return {
    user: split.slice(0,1),
    role: split.slice(1,1),
    timeRefreshed: split.slice(2).join(' '),
  }
}

и используйте ее следующим образом

const user = parseText(els[0].textcontent).user
const role = parseText(els[0].textcontent).role
const before = parseText(els[0].textcontent).timeRefreshed

# 3 - в ожидании обновления

Это немного грубо, но просто. Может быть улучшено ожиданием изменения текста, может быть достаточно should('not.contain', before).
Примечание cy.clock(), вероятно, не будет работать здесь.

# 4 - запуск обновления

У меня есть кнопка, которую нужно нажать, но, возможно, вам нужно будет набрать какой-то текст, возможно, на другой странице, и в этом случае этот шаг будет состоять из нескольких строк.

<Ч>
5
задан Ash 2 December 2008 в 13:07
поделиться

3 ответа

Поэтому HttpContextBase и HttpContextWrapper были представлены. Вы, вероятно, хотите использовать HttpContextBase и при передаче реального контекста в, использовать new HttpContextWrapper( httpContext ), хотя, я думаю, что то, что доступно Вам в контроллере, уже имеет тип HttpContextBase. Я создал бы один из них в моем контроллере каждый раз вместо того, чтобы пытаться сослаться на текущий контекст от статического, глобального HttpContext. Текущий экземпляр. Если Вы нуждаетесь в нем в своем представлении, передаете ссылку на Ваш контекст со строгим контролем типов в ViewData.

Я часто копирую HttpContextBase в моих тестах.

class WebInstanceService 
{
    private HttpContextBase _Context;        

    public WebInstanceService( ... , HttpContextBase HttpContext )
    {
        ....
        _Context = HttpContext;
    }

    // Methods...
    public string GetInstanceVariable(string VariableName)
    {
         return _Context.Session[VariableName];
    }
}
3
ответ дан 14 December 2019 в 19:29
поделиться

То, что мы делаем, вращать один из них http://haacked.com/archive/2007/06/19/unit-tests-web-code-without-a-web-server-using-httpsimulator.aspx

Легкий как круг, просто instanciate HttpSimulator и заполняют значения и HttpContext. Текущий заполнен тем, что Вы указываете.

IHttpContext - что-то, что находится в MVC, и по-видимому один день будет в веб-формах. Надо надеяться, тем днем будет .net 4

1
ответ дан 14 December 2019 в 19:29
поделиться

ASP.NET идет с Системой. Сеть. Абстракции, которые включают HttpContextBase, который можно использовать для контакта с HttpContext в ситуации с тестированием.

Я лично абстрагировал бы далеко прямую зависимость от HttpContext.

1
ответ дан 14 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

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