如何从 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 函数编写单元测试用例