2015-07-15 4 views
1

Ниже приведен код для моих ViewModel, test.html и test.js:QUnit Тест для нокаута JS неудовлетворительную: "ReferenceError: ViewModel не определен"

  1. ViewModel (название ViewModel является TestPersonName. JS)

    define(["knockout"], function (ko) { 
        "use strict"; 
        function PersonNameViewModel() { 
         var self = this; 
         self.firstName = ko.observable(); 
         self.lastName = ko.observable(); 
    
         self.initFullName = function() { 
          return (self.firstName() + " " + self.lastName()); 
         }   
    
         initFullName(); 
         }; 
         return PersonNameViewModel ; 
    }); 
    
  2. test.html файл

    <!DOCTYPE html> 
    <html> 
    <head> 
        <title>QUnit Example</title> 
        <link rel="stylesheet" href="qunit-1.18.0.css"> 
    </head> 
    <body> 
        <div id="qunit"></div> 
        <div id="qunit-fixture"></div> 
    
        <script src="qunit-1.18.0.js"></script> 
        <script type="text/javascript" src="./knockout-3.3.0.js"></script> 
        <script type="text/javascript" src="./jquery-2.1.3.js"></script> 
        <script type="text/javascript" src="./require.js"></script> 
        <!-- Source js file --> 
        <script src="TestPersonName.js"></script> 
        <!-- Test js file --> 
        <script src="./Test.js"></script> 
    </body> 
    </html> 
    

    Я скачал QUnit JS/CSS от https://qunitjs.com/

    Require.js файл используется из https://raw.githubusercontent.com/jrburke/requirejs/dev2.1/require.js

  3. Test.js файл

    test("FullNameTest", function() { 
        var model = new PersonNameViewModel(); 
        model.firstName("fn"); 
        model.lastName("ln");   
        equal("fn ln",model.initFullName(), "full name built properly"); 
    }); 
    

Выполнение test.html (в Chrome) дает следующее сообщение об ошибке:

My QUnit Tests: FullNameTest (1, 0, 1)

Died on test #1 at file:///D:/Test.js:23:9: PersonNameViewModel is not defined
Source:
ReferenceError: PersonNameViewModel is not defined
at Object. (file:///D:/Test.js:24:29)

Однако, когда я переписываю свой код для нокаута (TestPersonName.js), чтобы быть низкий образец, тест QUnit проходит и отлично работает.

var PersonNameViewModel = function() { 
    "use strict"; 
    var self = this; 

    self.firstName = ko.observable(); 
    self.lastName = ko.observable(); 

    self.initFullName = function() { 
    return (self.firstName() + " " + self.lastName()); 
    }; 
}; 

Вопрос заключается в том, что я должен следовать шаблону, указанному в верхней части для TestPersonName.js.

ответ

0

Необходимо указать файл как ваш пункт ввода для requirejs.

Я бы поставил свои тесты в этот файл. Посмотрите на этот пример:

test.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>QUnit Example</title> 
    <link rel="stylesheet" href="qunit-1.18.0.css"> 
</head> 
<body> 
    <div id="qunit"></div> 
    <div id="qunit-fixture"></div> 

    <script src="qunit-1.18.0.js"></script> 
    <script data-main="test" src="./require.js"></script> 
</body> 
</html> 

test.js

requirejs.config({ 
    baseUrl: 'lib', 
    paths: { 
     jquery: './jquery-2.1.3', 
     knockout: './knockout-3.3.0', 
     personNameViewModel: './TestPersonName' 
    } 
}); 

define(['jquery', 'knockout', 'personNameViewModel'], function($, ko, viewModel){ 
test("FullNameTest", function() { 
    var model = new viewModel(); 
    model.firstName("fn"); 
    model.lastName("ln");   
    equal("fn ln",model.initFullName(), "full name built properly"); 
}); 
}); 

Я удалил ссылки сценария нокаутировать, JQuery и TestPersonName из HTML файл. Requirejs будут вставлять ссылки на скрипты для вас при запуске. И test.js будет точкой входа для этого теста, который будет запускаться при загрузке requirejs, обратите внимание на атрибут data-main в теге скрипта, который ссылается на requirejs.

+0

Спасибо за ответ это было очень полезно. Однако я запускаю свои тестовые примеры, используя phatomjs из командной строки и сталкиваясь с несогласованностью при выполнении. Иногда только тестовые примеры идентифицируются и выполняются, иначе в основном он говорит «0 из 0 тестов успешно». Моя конечная цель - автоматизировать их с помощью сборки ant. Я использую следующую утилиту для использования командной строки phatomjs: https://github.com/leedavidr/qunit/blob/master/addons/phantomjs/runner.js – Anurag

0

@Anish Спасибо за ответ, это было очень полезно. Однако я запускаю свои тестовые примеры, используя phatomjs из командной строки и сталкиваясь с несогласованностью при выполнении. Иногда только тестовые примеры идентифицируются и выполняются, иначе в основном он говорит «0 из 0 тестов успешно». Моя конечная цель - автоматизировать их с помощью сборки ant.

Я использую следующие phatomjs командной строки бегун утилиты: https://github.com/leedavidr/qunit/blob/master/addons/phantomjs/runner.js

Смежные вопросы