Макет сетевых запросов в Cypress

Вы можете попробовать использовать "typeid" .

Это не работает для имени объекта, но вы знаете имя объекта, поэтому вам просто нужно его сохранить где-то. Компилятору все равно, что вы начертили объект.

Его стоит иметь в виду, однако, что вывод typeid является спецификой компилятора, поэтому даже если он производит то, что вы делаете на текущей платформе он не может по другому. Это может быть или не быть проблемой для вас.

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

Edit: Быть более явным

template< typename Type > class ClassName
{
public:
    static std::string name()
    {
        return "Unknown";
    }
};

Затем для каждого класса somethign liek следующее:

template<> class ClassName
{
public:
    static std::string name()
    {
        return "MyClass";
    }
};

Что может быть даже макросом следующим образом:

#define DefineClassName( className ) \
\
template<> class ClassName \
{ \
public: \
    static std::string name() \
    { \
        return #className; \
    } \
}; \

Позволяет вам просто

DefineClassName( MyClass );

Наконец, чтобы получить имя класса, d выполните следующие действия:

ClassName< MyClass >::name();

Edit2: в дальнейшем вам нужно будет поместить это макрос «DefineClassName» в каждый класс, который вы создали, и определить функцию «имя класса», которая вызовет функцию статического шаблона .

Edit3: И подумайте об этом ... Очевидно, что плохое опубликование первой вещи по утрам, как вы можете, просто определить функцию-член «classname ()» следующим образом:

std::string classname()
{
     return "MyClass";
}

, который может быть macro'd следующим образом:

DefineClassName( className ) \
std::string classname()  \
{ \
     return #className; \
}

Тогда вы можете просто просто отбросить

DefineClassName( MyClass );

в класс, как вы его определяете ...

4
задан Ollie 20 March 2019 в 13:44
поделиться

2 ответа

В настоящее время Cypress cy.route может блокировать только сетевые запросы, использующие XHRs

Собственные элементы формы HTML не используют XMLHTTPRequest , поэтому вы не можете используйте cy.route, чтобы заглушить его.

Большинство людей не сталкиваются с этой проблемой, потому что использование нативных форм HTML не так распространено в наши дни

Редактировать:

Вы также waiting на маршрут, но на самом деле ничего не сделал в вашем тесте. Ваш тест должен выглядеть примерно так:

  cy.route('GET',
      '**/getIncentives*',
      {info: {}, results: {}}
  ).as('oppty');

  // cypress code that would cause a network request.

  cy.wait('@oppty');

Также убедитесь, что запрос имеет тип: XHR: enter image description here

0
ответ дан bkucera 20 March 2019 в 13:44
поделиться

Cypress найдет сетевой запрос только после того, как будет псевдонимом. Код в вашем вопросе указал, что вы не выполняете действие, которое вызовет сетевой запрос:

        cy.route('GET',
            '**/getIncentives*',
            {info: {}, results: {}}
        ).as('oppty');

       // cypress expected something to cause a network request here

        cy.wait('@oppty');

Вы должны либо переместить вызов на route ранее в тесте, либо переместить код, вызывающий запрос после звонка в route.

0
ответ дан bkucera 20 March 2019 в 13:44
поделиться
Другие вопросы по тегам:

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