Node.js 单元测试中的把手模板,如何

Node.js 单元测试中的把手模板,如何,node.js,unit-testing,handlebars.js,yui3,Node.js,Unit Testing,Handlebars.js,Yui3,我正在YUI3中创建客户端测试,需要为我正在测试的页面编译Handlebar模板 我们正在运行一个节点应用程序,将hbs设置为渲染引擎,因此当请求进入服务器时,路由器会通过调用res.render()并直接调用views目录中的.hbs文件来响应 在测试中,我需要实例化handlebar模板,然后将其分配给DOM,但由于测试是javascript,我无法访问文件流功能,handlebar.compile()不将路径作为参数 基本上我想这样做,但是handlebar.compile()方法连续编译

我正在YUI3中创建客户端测试,需要为我正在测试的页面编译Handlebar模板

我们正在运行一个节点应用程序,将hbs设置为渲染引擎,因此当请求进入服务器时,路由器会通过调用res.render()并直接调用views目录中的.hbs文件来响应

在测试中,我需要实例化handlebar模板,然后将其分配给DOM,但由于测试是javascript,我无法访问文件流功能,handlebar.compile()不将路径作为参数

基本上我想这样做,但是handlebar.compile()方法连续编译引用的模板文件:

var body = A.one(document.body);
var container = A.Node.create('<div id="test-container"></div>');
var domTemplate = Handlebars.compile('../../../../views/campaign/set-campaign-properties.hbs');
var dom = A.Node.create(domTemplate);
container.append(dom);
body.append(container);
var body=A.one(document.body);
var container=A.Node.create(“”);
var domTemplate=handlebar.compile('../../../../views/campaign/set campaign properties.hbs');
var dom=A.Node.create(domTemplate);
container.append(dom);
body.append(容器);

请记住,客户端和服务器之间存在很大差异,您要求在服务器上测试客户端项目,这可能会导致一些奇怪的问题,但是有一些好的工具可以提供帮助。通常,当我对我的模板呈现进行单元测试时,我会使用phantomjs或selenium之类的东西。但是,您可以使用jsdom或jest在服务器端处理对dom的解析

我用jsdom制作了一个样本

var handlebar=require(“把手”)
var source=“你好,我的名字是{{name}。我来自{{家乡}。我有”+
“{{kids.length}}孩子:

”+ “
    {{{kids}}
  • {{name}}是{{age}
  • {{/kids}
”; var template=handlebar.compile(源代码); 变量数据={“名称”:“艾伦”,“家乡”:“德克萨斯州某地”, “孩子们”:[{“姓名”:“吉米”,“年龄”:“12”},{“姓名”:“萨利”,“年龄”:“4”}]}; var templateResult=模板(数据); var jsdom=require(“jsdom”); jsdom.env( templateResult, ["http://code.jquery.com/jquery.js"], 函数(错误,窗口){ log(“p标记的内容:”,window.$(“p”).text()); } );
谢谢您的回复,但我的问题是我需要从hbs文件中编译车把模板。如何将“源”中的模板替换为另一个目录中文件中的模板?这里有一个小问题,因为服务器与客户端之间存在冲突。从服务器加载它的方式是将文件读入字符串,然后像我在这里所做的那样加载它。在客户端,通过ajax加载文件。有一些库可以帮助您解决问题。我一直在使用webpack,它使用CommonJS模式来处理在服务器和客户机上加载对象。我将添加一个更完整的演示,在一点点。谢谢。回顾最初的问题,我发现我不清楚我的用例。把手模板存在于生产过程中由Express engine render()方法调用的.hbs模板中。这里我需要的是为视图编写测试。为此,我需要实例化视图和控制器。我遇到的问题是,控制器抛出错误,因为它在DOM中有多个钩子,而到目前为止,我无法实例化DOM,因为我无法在测试期间调用和呈现把手模板文件。这更清楚了吗?你能在runnable上设置一个小示例吗?再次感谢JE,但我不相信我能设置一个示例,因为我不相信我能设置环境依赖项,最明显的是,在本例中的主要问题是从测试中调用一个本地.hsb文件。我是现有应用程序的新团队成员,因此整个环境已经建立并运行。我只有一个问题,关于如何在单元测试中从.hbs文件编译Handlebar模板。
var Handlebars = require("handlebars")
var source = "<p>Hello, my name is {{name}}. I am from {{hometown}}. I have " +
             "{{kids.length}} kids:</p>" +
             "<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var template = Handlebars.compile(source);

var data = { "name": "Alan", "hometown": "Somewhere, TX",
             "kids": [{"name": "Jimmy", "age": "12"}, {"name": "Sally", "age": "4"}]};
var templateResult = template(data);

var jsdom = require("jsdom");

jsdom.env(
  templateResult,
  ["http://code.jquery.com/jquery.js"],
  function (errors, window) {
    console.log("contents of p tag:", window.$("p").text());
  }
);