首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jasmine Headless Webkit主干和把手

Jasmine Headless Webkit主干和把手
EN

Stack Overflow用户
提问于 2013-03-14 04:00:47
回答 1查看 368关注 0票数 2

我正在使用sht_rails gem在我的Rails3.2/Backbone应用程序中呈现handlebars模板。

我希望在应用程序的主干和rails部分都使用这个.handlebars模板,但到目前为止,我只在主干上使用它。

我是这样使用它的:

代码语言:javascript
复制
class MyApp.views.MyView extends MyApp.views.BaseView

  template: SHT['templates/feed_item']

  render: ->
    data = {}
    @$el.html @template(data)
    @

这在应用程序中工作得很好,一点问题都没有,我的车把模板看起来很可爱。

然而,这对我的js测试没有好处(我使用的是带有Jasmine -headless-webkit的jasmine)

这就是发生的事情:

代码语言:javascript
复制
$ jasmine-headless-webkit
ReferenceError: Can't find variable: SHT

这是完全有意义的,因为似乎sht_rails gem注册了SHT变量,然而,当我测试时,它似乎没有这样做。

在运行jhw时,有没有注册SHT变量的好方法?还是茉莉花本身?我甚至不需要模板来呈现我的测试,只要知道模板被调用就足够了。但是现在,在我弄清楚如何注册这个SHT之前,我所有的jasmine测试都是失败的。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-06 06:46:44

当我们通过tilt-jade gem在Rails3.2/Backbone/Marionette应用程序中使用jade templates时,我们遇到了同样的问题(因此在下面的代码示例中使用JST变量)。我们的解决方案是创建一个模板抽象,然后在规范执行期间使用Jasmine spies来伪造响应。这种方法还允许我们测试模板的使用、构造等。

间谍通篇

如果您不熟悉Jasmine spies

Jasmine集成了允许许多间谍、模仿和伪造行为的“间谍”。“间谍”取代了它所监视的功能。

抽象

创建抽象:

代码语言:javascript
复制
YourApp.tpl = function(key, data) {
  var path = "templates";
  path += key.charAt(0) === "/" ? key : "/" + key;

  var templateFn = JST[path];
  if(!templateFn) {
    throw new Error('Template "' + path + '" not found');
  }
  if(typeof templateFn !== "function") {
    throw new Error('Template "' + path + '" was a ' + typeof(templateFn) + '. Type "function" expected');
  }
  return templateFn(data);
};

和必要的monkeypatch:

代码语言:javascript
复制
// MONKEYPATCH - Overriding Renderer to use YourApp template function
Marionette.Renderer = {
  render: function(template, model){
    return YourApp.tpl(template, model);
  }
};

模板抽象间谍(spec_helper.js)

现在我们可以按如下方式进行侦察:

代码语言:javascript
复制
spyOn(YourApp, 'tpl').andCallFake(function(key, data) {
  return function() {
    return key;
  };
});

奖金

由于我们监视的是YourApp.tpl函数,因此我们也可以对其进行测试:

代码语言:javascript
复制
expect(YourApp.tpl).toHaveBeenCalledWith("your_template", { model: model, property: value });

附录

如果您还不知道jasmine-headless-webkit -- runner -out标志,并且正在野外调试您的Jasmine规范,请查看此post,看看如何生成一个runner输出报告,其中包含所有失败的完整回溯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15395290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档