如何从 jasmine 测试用例中解析角度 lang json 文件(角度本地化模块)

Posted

技术标签:

【中文标题】如何从 jasmine 测试用例中解析角度 lang json 文件(角度本地化模块)【英文标题】:How to resolve angular lang json file(angular-localization module) from jasmine test case 【发布时间】:2017-08-16 02:55:42 【问题描述】:

我有使用角度本地化语言环境服务的角度服务方法。 我想为方法编写茉莉花测试用例,因为茉莉花无法做到 解决它。可能还没有完全解决

//service method
$scope.getExcelName = function() 
  var name = locale.getString('export.fileName')
  return name;


//lang file 
'fileName': 'Status Report'

//Jasmine test case
describe('Service:MyService', function() 
  var myService
  beforeEach(module('app'))

  beforeEach(inject(function($injector) 
    myService = $injector.get('MyService');
  ))

  it('check export name', function() 
    //myService.getExcel giving '' instead of  Status Report
    expect(myService.getExcelName()).toBe('Status Report')
  )
)

如何解决上述问题?

【问题讨论】:

您不应该注入作用域并调用摘要以实现它吗? 我不确定你是否可以通过一等函数来期望:你通过 myService.getExcelName 并且你不调用它,尝试:expect(myService.getExcelName()).toBe('Status报告')。你想传递一流的函数以防你窥探它们,所以:expect(trackedFunction).toHaveBeenCalled(); 你的意思是写expect(myService.getExcelName())而不是expect(myService.getExcelName) 另外,请提供完整的服务代码。看起来您向我们展示的内容是指令或控制器的一部分。 @AndrewEisenberg 我的意思是写 myService.getExcelName() 【参考方案1】:

您似乎遇到了竞争状况(摘自文档):

比赛条件

始终使用 locale.ready() 传递文件名 其中令牌存在于该上下文中,并包含任何其他 在此承诺的回调中对 locale.getString() 的相关调用 功能块。不这样做可能会导致意外(空)的结果 由于整个 javascript 应用程序的异步特性。

您可以使用 locale.getPath() 来查找任何给定令牌的文件名。

所以解决方案应该是注入locale 服务并将expect 行包装在locale.ready() 调用中,例如:

it('check export name', function(done) 
  locale.ready('export')
    .then(function() 
      expect(myService.getExcelName()).toBe('Status Report');
      done();
    )
    .catch(done.fail);
);

为了安全起见,您可能也应该在服务本身中做同样的事情。

【讨论】:

它阻止顺序执行它不等待任何异步行为。 locale.ready 创建承诺。我试过了,但没有用。 你说得对,我忘了为测试添加异步处理。根据您使用的测试框架,您可以将“完成”属性传递给测试回调(我使用此解决方案更新了答案中的代码)或使用return locale.ready('export').then(function() ... 返回承诺。 我试过这个并且得到错误“错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。” 那么对locale.ready('export') 的调用要么抛出错误,要么以某种方式挂起。我已经更新了上面的代码以添加错误处理,因此如果有错误,您会看到错误,并且您可能会理解发生了什么。

以上是关于如何从 jasmine 测试用例中解析角度 lang json 文件(角度本地化模块)的主要内容,如果未能解决你的问题,请参考以下文章

使用 jasmine 对控制器中基于资源的工厂进行角度 js 单元测试

无法绑定到“(ngModel”,因为它不是角度单元测试用例中“输入”的已知属性

如何使用 Jasmine 为以下 javascript 函数编写单元测试用例

如何在 jasmine 中编写单元测试用例?

在 Laravel 测试用例中模拟一个 http 请求并解析路由参数

使用 Jasmine 和 Karma 进行角度单元测试时出错