Ниже приведен код для моих ViewModel, test.html и test.js:QUnit Тест для нокаута JS неудовлетворительную: "ReferenceError: ViewModel не определен"
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 ; });
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
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
.
Спасибо за ответ это было очень полезно. Однако я запускаю свои тестовые примеры, используя phatomjs из командной строки и сталкиваясь с несогласованностью при выполнении. Иногда только тестовые примеры идентифицируются и выполняются, иначе в основном он говорит «0 из 0 тестов успешно». Моя конечная цель - автоматизировать их с помощью сборки ant. Я использую следующую утилиту для использования командной строки phatomjs: https://github.com/leedavidr/qunit/blob/master/addons/phantomjs/runner.js – Anurag