首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAWR i18n:使用消息测试javascript的单元

JAWR i18n:使用消息测试javascript的单元
EN

Stack Overflow用户
提问于 2011-09-12 05:35:04
回答 1查看 347关注 0票数 0

我们的应用程序目前在Java和Javascript端共享消息。它们以资源包的形式存储在类路径中,并且我们有一个自定义控制器,它以Json的形式返回所有消息。客户端代码如下所示:

代码语言:javascript
复制
// This calls the controller to get all the messages
var messages = MessageBundle();
var text = messages.get('my.message', 1);

这很好,因为我们可以在单元测试中模拟“消息”。

为此,我想开始使用JAWR,因为我们已经将它用于其他事情。问题是JAWR 生成以下Javascript对象

代码语言:javascript
复制
var text = messages.my.message(1);

这意味着代码不能再被单元测试的测试了,除非单元测试也用正确的嵌套对象定义一个全局“消息”变量。有办法绕道吗?知道如何扩展JAWR以使这个单元可测试吗?

目前我的工作是:

代码语言:javascript
复制
function messages() {
    var args = Array.prototype.slice.call(arguments);
    var messageId = args.shift();
    var messageFunc = window.messages;        
    messageId.split('.').forEach(function(part) {
        messageFunc = messageFunc[part];
    });
    return messageFunc(args);
}

// Same syntax as the old one, but uses the JAWR object behind the scenes
// This function is easy to mock for a unit test
var text = messages('my.message', 1);

谢谢你的想法!

EN

回答 1

Stack Overflow用户

发布于 2011-09-12 06:11:03

也许下一个样本能帮你。

1)

代码语言:javascript
复制
function messagesTester(funcPath,id) {
  var args=funcPath.split('.'),root=window.messages;
  for(var i=0;i<args.length;i++)root=root[args[i]];
  return root(id);
  // or if more that one parameter for *func*, then, for example:
  // return root.apply(null,Array.prototype.slice(arguments,1));
}
var text = messagesTester('my.message',1);

2)

代码语言:javascript
复制
function messagesTester(funcPath) {
  var args=funcPath.split('.'),root=window.messages;
  for(var i=0;i<args.length;i++)root=root[args[i]];
  return root;
}
// var text = messagesTester('my.message')( /*arguments list*/ );
var text = messagesTester('my.message')(1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7383678

复制
相关文章

相似问题

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