Средство запуска тестов Visual Studio с наглостью не распознает тесты QUnit при использовании как Requirejs, так и Knockoutjs

Я пытаюсь заставить обозреватель тестов VS 2013 с наглостью распознавать тесты QUnit, пока я использую require.js в сочетании с Knockoutjs

Я нашел несколько хороших ресурсов, перечисленных ниже, но я думаю, что у меня должен быть только один недостающий элемент.

Вот что я могу воспроизвести:

  • Если я просто использую наглость и qunit, я могу заставить его работать, поэтому я знаю, что у меня правильно установлена ​​наглость для запуска тестов VS.

пример: testThatWorks.js

        test("test that shows up in test explorer", function () {
            equal("444test", "444test");
        });
  • Если просмотреть index.html в браузере, он запускает мои тесты с правильными результатами.
  • Если я использую синтаксис определения, он также работает

пример: testThatAlsoWorks.js

define(
function () {

    test("Test that also shows up in test explorer.", function () {
        equal("444test", "444test");
    });

});
  • Если я использую синтаксис require для включения любого другого ресурса, он терпит неудачу (это загружает нокаут, но фактически не использует его)

пример: testThatDoesn'tWork.js

define(['knockout'],
function (ko) {

    test("Test that doesn't show up in test explorer.", function () {
        equal("444test", "444test");
    });
});

Вот что показывает обозреватель тестов VS 2013:

введите здесь описание изображения

Вот соответствующая настройка проекта (есть и другие файлы для моего реального проекта, но я стараюсь не усложнять):

index.html (think I won't need this once I get it working in VS test runner)
tests
   references
      qunit.css
      qunit.js
      qunit.html
   chutzpah.json
   unittestsmain.js (think I won't need this once I get it working in VS test runner)
   testThatWorks.js
   testThatDoesntWork.js
   testThatAlsoWorks.js
Scripts
   jquery stuff
   require.js stuff
   knockout stuff
   ...

Вот моя наглость.json

{
   "Framework": "qunit",
   "TestHarnessReferenceMode": "AMD",
   "TestHarnessLocationMode": "SettingsFileAdjacent",
   "References" : [
      {"Path" : "../Scripts/require.js" }
   ]
}

Это ошибка тайм-аута в файле Chutzpah.log.

Ошибка: Ошибка: тайм-аут при выполнении тестового файла Во время работы: c:\workingfoldertfs\lesa-it\developers\whitezelb\chutzpahexample\chutzpahexample\chutzpahexample\tests\testthatdoesntwork.js vstest.executionengine.x86.exe Ошибка: 0: Время: 12:45:01.2839495; Тема: 34; Сообщение: Безголовый браузер вернулся с ошибкой: время ожидания истекло при выполнении тестового файла


person Beth Whitezel    schedule 05.06.2014    source источник
comment
Я запутался, что это не работает? Кроме того, можете ли вы загрузить полную копию на github, чтобы я мог протестировать локально?   -  person Matthew Manela    schedule 18.06.2014
comment
@MatthewManela Я обновил вопрос, указав некоторый прогресс, которого я добился, и я думаю, что он изолирует реальную проблему, с которой я столкнулся. Я также загружу на github через пару минут.   -  person Beth Whitezel    schedule 18.06.2014
comment
Полный пример решения @MatthewManela опубликован на github.com/BethWhitezel/Chutzpah-VS2013andRequireJS-example   -  person Beth Whitezel    schedule 19.06.2014
comment
Возможно, это связано с stackoverflow.com/a/22124292/451736.   -  person Beth Whitezel    schedule 19.06.2014
comment
@MatthewManela правильно ли имеет значение порядок ссылок в файле Chutzpah.json? Смотрите мой ответ ниже... кажется, это имеет значение.   -  person Beth Whitezel    schedule 19.06.2014


Ответы (1)


Моя ошибка была вызвана неправильным использованием «путей» для зависимостей. Пример, показанный выше, работает, если файл testthatdoesntwork.js изменен на:

define(['../Scripts/knockout-3.1.0'],
function (knockout) {
    test("Test that doesn't show up in test explorer.", function () {
        equal("444test", "444test");
    }); 
});

и файл Chutzpah.json выглядит так:

{
"Framework": "qunit",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"References" : [
     {"Path" : "../Scripts/knockout-3.1.0.js" },
     {"Path" : "../Scripts/require.js" }

]
}

Глядя на https://chutzpah.codeplex.com/workitem/214 и https://stackoverflow.com/a/22124292/451736 помог мне разобраться в проблеме, с которой я столкнулся.

Также кажется, что порядок ссылок в файле Chutzpah.json имеет значение, потому что все остальное то же самое, а файл json изменен на приведенный ниже, тест не показывает.

{
"Framework": "qunit",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"References" : [
     {"Path" : "../Scripts/require.js"} ,
     {"Path" : "../Scripts/knockout-3.1.0.js"}

]
}
person Beth Whitezel    schedule 18.06.2014
comment
Правильно, порядок в разделе ссылок очень важен - person Matthew Manela; 19.06.2014
comment
Спасибо... вы ОЧЕНЬ помогли. Есть ли документация, которую я пропустил, в которой говорится о том, каким должен быть порядок? На самом деле я пытаюсь заставить его работать с Knockout и Knockout.mapping, но не могу понять, неправильный ли это порядок, ссылка или и то, и другое. - person Beth Whitezel; 19.06.2014
comment
Ну, по сути, наглость поставит их в том же порядке в сгенерированном файле HTML. Поэтому вам нужно выяснить для своих ссылок, как вы заставите его работать, если вы просто создаете HTML-файл вручную для запуска своих тестов. Затем скажите наглости сделать то же самое - person Matthew Manela; 19.06.2014
comment
Это имеет смысл, но require.js и Knockout не имеют зависимостей друг от друга, поэтому я все еще немного смущен тем, почему порядок имеет значение между ними двумя. Я предполагаю, что мое непонимание есть то, что мешает мне понять проблему, с которой я столкнулся при загрузке Knockout.mapping. Можно ли где-нибудь просмотреть HTML-файл, который генерирует наглость? Это может помочь мне понять - person Beth Whitezel; 19.06.2014
comment
Я думаю, что Knockout определяет свою собственную функцию require, которая может столкнуться с функцией Require.js, если порядок неправильный. - person Matthew Manela; 19.06.2014
comment
@MatthewManela большое спасибо за помощь. Это помогло мне заставить его работать и с Knockout.mapping. Я обнаружил, что могу видеть HTML, если он ожидает истечения времени ожидания, и это позволяет мне лучше видеть настоящие ошибки. Все отлично работает сейчас. - person Beth Whitezel; 19.06.2014