Адаптер VS 2012 Chutzpah и интеграция модульного тестирования Jasmine Javascript

Я работаю над включением модульного тестирования JavaScript в проект ASP.NET, над которым работаю. Я установил адаптер наглости и Jasmine. После тщательного следования указаниям, данным в видео Райана Кромвеля, по установке и настройке среды , я сталкиваюсь с ошибкой, аналогичной этой публикации, для проблем с Наглость и QUnit, однако я использую Jasmine вместо QUnit, и его решение, похоже, не применимо, по крайней мере, не таким образом.

Вот тестируемый JavaScript (WebApp.Utils.js). Тестируемая функция - это метод "класса" WebApp.Utils, определенный с использованием шаблона "Revealing Module" (не уверен, что это актуально или нет)...

var WebApp = (typeof WebApp === "undefined") ? { } : WebApp ;

$(document).ready(function () {

    WebApp .Utils = (function () {

        var ParseDecimal = function (value, decimalPlaces) {
            /// <summary>Parses a number into a decimal value with the specified number of decimal places</summary>
            /// <param name="value" type="number">Number to parse</param>
            /// <param name="decimalPlaces" type="integer">Number of decimal places to parse to. </param>
            ///
            return parseFloat(Math.round(value * 100) / 100).toFixed(decimalPlaces);
        }

        return {

            ParseDecimal: ParseDecimal
        }

    })();

});

Вот написанный тест с использованием Jasmine для его проверки. Правильность ссылок на файлы подтверждена. На самом деле IntelliSense работает, поэтому я знаю, что он его видит.

/// <reference path="../tools/jasmine.js" />
/// <reference path="../shared/WebApp.Utils.js" />
/// 

describe("WebApp.Utils.ParseDecimal", function () {


    it("can ParseDecimal", function () {        
        var result = WebApp.Utils.ParseDecimal(15.451222, 2);
        expect(result).toBe(15.45);
    });
});

И вот ошибка, которую я получаю, это Visual Studio, когда я сохраняю файл и запускаю тест.

Test Name:  WebApp.Utils can ParseDecimal
Test FullName:  j:\projects - gary\WebApp\rc1iteration05\rc1iteration05\scripts\tests\test.js::WebApp.utils::can parsedecimal
Test Source:    j:\projects - gary\WebApp\rc1iteration05\rc1iteration05\scripts\tests\test.js : line 7
Test Outcome:   Failed
Test Duration:  0:00:00.003

Result Message: TypeError: 'undefined' is not an object (evaluating 'WebApp.Utils.ParseDecimal') in file:///j:/projects%20-%20gary/WebApp/rc1iteration05/rc1iteration05/scripts/tests/test.js (line 9)
        at file:///j:/projects%20-%20gary/WebApp/rc1iteration05/rc1iteration05/scripts/tests/test.js:9
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:1064
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2096
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2049
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2378
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2096
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2049
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2523
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2096
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2049
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:2145
        at file:///C:/USERS/GSTENSTROM/APPDATA/LOCAL/MICROSOFT/VISUALSTUDIO/11.0/EXTENSIONS/ADQAX1GK.5GB/TestFiles/jasmine/jasmine.js:802
        at startJasmine (phantomjs://webpage.evaluate():15)
        at phantomjs://webpage.evaluate():25

person Gary O. Stenstrom    schedule 01.11.2013    source источник


Ответы (1)


Как оказалось, Chuztpah не распознает ссылки корневого уровня (по сравнению с относительными ссылками). Чего вы не увидели в предоставленном мной коде, так это того, что файл WebApps.Utls.js также содержал ссылку на

/// <reference path="/Scripts/jquery/_references.js" />
/// <reference path="/Scripts/tools/modernizr-2.6.2.js" />
/// <reference path="/Scripts/tools/_references.js" />

Эти другие справочные файлы, в свою очередь, обеспечивают связь с такими инструментами, как Knockout, jquery и т. д. Как только я предоставил эти отдельные относительные ссылки в верхней части моего тестового файла Jasmine, все заработало нормально.

/// <reference path="../../jquery/jquery-2.0.3.js" />
/// <reference path="../../tools/jasmine.js" />
/// <reference path="../../tools/knockout-2.1.0.debug.js" />
/// <reference path="../../tools/modernizr-2.6.2.js" />
/// <reference path="../../tools/jshashset_src.js" />
/// <reference path="../../tools/jshashtable-2.1.js" />
/// <reference path="../../tools/json2.js" />
/// <reference path="../../Models/ServiceLevelDTO.js" />
/// <reference path="../../shared/WebApp.Utils.js" />
person Gary O. Stenstrom    schedule 04.11.2013