Почему эти жармин-тесты работают в браузере, а не в фантомах?

Заранее спасибо всем, кто прочитает это - в этом вопросе достаточно много деталей.

Я пытаюсь внедрить тестирование javascript в наш проект, используя Jasmine. Тесты, которые я написал, работают в браузере, но не используют PhantomJS через Resharper.

Я предполагаю, что мне чего-то не хватает в сантехнике, необходимой для анализа наших файлов JS (возможно, я обнаружил проблему с нашей настройкой JS). Любая помощь очень ценится...

Я установил тесты Жасмин внутри Visual Studio, используя жасмин...

// The Jasmine Test Framework
/// <reference path="../jquery-1.10.1.js"/>
/// <reference path="lib/jasmine-1.3.1/jasmine.css"/>
/// <reference path="lib/jasmine-1.3.1/jasmine.js"/>
/// <reference path="lib/jasmine-1.3.1/jasmine-html.js"/>
/// <reference path="lib/jasmine-jquery.js"/>
/// <reference path="lib/mock-ajax.js"/>
// Classes to test
/// <reference path="../MyNamespace.Navigation.js"/>

describe("Breadcrumbs", function () {
    it("should have a window object", function() {
        //this test passes in PhantomJS and the browser
        expect(window).toBeDefined();
    });

    it("should have the base object available", function() {
        //this test only passes in the browser
        expect(window.MyNamespace).toBeDefined();
    });
});

это ссылается на файл JS, который содержит...

(function (app, $, undefined) {
     //do things here
}(window.MyNameSpace = window.MyNamespace || {}, jQuery));

У меня есть SpecRunner.html, который может успешно запускать мои тесты... это html specrunner, который поставляется с Jasmine 1.3.1 автономно, с головой, отредактированной так...

 <link rel="stylesheet" type="text/css" href="lib/jasmine-1.3.1/jasmine.css">
  <script type="text/javascript" src="../jquery-1.10.1.js"></script>
  <script type="text/javascript" src="lib/jasmine-1.3.1/jasmine.js"></script>
  <script type="text/javascript" src="lib/jasmine-1.3.1/jasmine-html.js"></script>

  <!-- include source files here... -->
  <script type="text/javascript" src="../MyNamespace.Navigation.js"></script>

  <!-- include spec files here... -->
  <script type="text/javascript" src="spec/BreadcrumbsSpec.js"></script>

Эти тесты выполняются либо моим SpecRunner.html (который работает нормально), либо с помощью тестового прогона Resharper 7s с использованием PhantomJS, который, как я предполагаю, не оценивает код в моем файле кода JS..?


Обновление: некоторые дополнительные детали...

Решарпер версия:

JetBrains ReSharper 7.1.3 Полная версия, сборка 7.1.3000.2254, 2013-04-10T16:48:18

и Phantom JS версия 1.9.1.0

И я только что понял, что у меня нет фактической ошибки в моем вопросе - Дох!

TypeError: 'undefined' is not an object (evaluating 'window.MyNamespace.Whatever') in http://localhost:47815/Tests.js (line 26)
TypeError: 'undefined' is not an object (evaluating 'window.MyNamespace.Whatever')
    at  BreadcrumbsSpec.js: line 26
    at  jasmine.js: line 1035
    at  jasmine.js: line 2053
    at  jasmine.js: line 2006
    at  jasmine.js: line 2335
    at  jasmine.js: line 2053
    at  jasmine.js:2043

Интересно, что Tests.js - это не мой файл - я думаю, это R#.

Ах - Tests.js - это мой файл спецификаций (например, BreadcrumbsSpec.js в данном случае). Если я запускаю параметры переключателя, чтобы сообщить Resharper TestRunner об использовании браузера, я получаю те же результаты (т. Е. Определяется только окно) и пустую страницу в браузере...

1 ответ

Решение

Эврика... проблема была в ID-ten-T, иначе известном как PEBCAK

Я не думал и не исследовал, как R# будет на самом деле запускать тесты. И поэтому установил ссылочные пути в Spec.js относительно моего specrunner.html

R# фактически внедряет файл Spec в html-страницу как встроенный скрипт, поэтому мои относительные пути были неверными.

Я просто установил ссылочные пути как абсолютные от корня проекта, и все было в порядке.

// The Jasmine Test Framework
/// <reference path="/Scripts/jquery-1.10.1.js"/>
/// <reference path="/Scripts/tests/lib/jasmine-1.3.1/jasmine.js"/>
/// <reference path="/Scripts/tests/lib/jasmine-1.3.1/jasmine-html.js"/>
/// <reference path="/Scripts/tests/lib/jasmine-jquery.js"/>
/// <reference path="/Scripts/tests/lib/mock-ajax.js"/>
// Classes to test
/// <reference path="/Scripts/MyNamespace.Navigation.js"/>

Спасибо R# людям за участие в Твиттере!

Другие вопросы по тегам