我有以下测试用例:
it('should return id if the post is successful',function(){
var result = {
id : "123"
};
ctrl.saveCallback(result);
expect(ctrl.method.id).to.equal("123");
});
ctrl.saveCallback
将result.id
复制到method.id
上的ctrl
,然后显示成功横幅。在成功横幅广告中,我们使用translate
过滤器在显示消息之前对其进行翻译。
功能:
.....
ctrl.method.id = result.id;
magicallyShowOnScreen($filter('translate')('MESSAGES.SUCCESS'));
....
magicallyShowOnScreen
是一个服务,它显示我们传递到屏幕上的任何字符串,并且已经注入到beforeEach中。
有人可以指出我应该如何测试或模拟这个$filter('translate')
吗?
答案 0 :(得分:1)
前言:我不熟悉Mocha.js或者如何创建间谍,但是你仍然会像对待其他测试框架一样注入它们或类似的模拟对象。
下面是一个Jasmine示例,我希望它有所帮助。
当你引导模块时(使用module
/ angular.mocks.module
)函数,你应该提供你自己的$filter
版本,它应该是一个模拟/间谍,它会返回另一个模拟/间谍。例如
var $filter, filterFn;
beforeEach(module('myModule', function($provide) {
$filter = jasmine.createSpy('$filter');
filterFn = jasmine.createSpy('filterFn');
$filter.and.returnValue(filterFn);
$provide.value('$filter', $filter);
});
然后,在您的测试中,您可以确保使用正确的参数调用$filter
,例如
expect($filter).toHaveBeenCalledWith('translate');
expect(filterFn).toHaveBeenCalledWith('MESSAGE.SUCCESS');
expect(magicallyShowOnScreen).toHaveBeenCalled(); // assuming this too is a spy