我正在为我的控制器中的函数编写单元测试。
该函数使用$ filter格式化'yyyy-MM-dd'格式的日期。
然而,我的业力脚本无法在使用过滤器的行之后运行。
以下是功能:
$scope.myFunction = function (someDate) {
var dateTo = new Date(someDate);
var myDate = $scope.myDate;
// Code fails after line below on unit test /////
var searchdate = (filter('date')(myDate, 'yyyy-MM-dd'));
searchdate = serviceConvertISODate.convertDate(searchdate);
}
在上面的示例中,var myDate = 1405967947000(epoc格式)
单元测试:
describe('Validating functions within Controller', function () {
var scope, ctrl, filter, localServiceConvertISODate;
beforeEach(inject(function($controller, $rootScope, $filter, serviceConvertISODate) {
scope = $rootScope.$new(),
ctrl = $controller('MyController', {
$scope: scope,
filter : $filter,
serviceConvertISODate : localServiceConvertISODate
});
}));
it('should test my function', function() {
var dateTo = new Date("22 Sep 2014");
console.log("********* dateTo = " + dateTo );
var myDate = $scope.myDate;
console.log("********* myDate = " + myDate );
var searchdate = (filter('date')(myDate, 'yyyy-MM-dd'));
console.log("searchdate after filter = " + searchdate);
searchdate = localServiceConvertISODate.convertDate(searchdate);
});
});
我可以看到我的日志:
dateTo is returning the correct new date
myDate is returning the correct myDate
但是,应用下一行(过滤器)会导致测试中断并且不会出现错误。
答案 0 :(得分:2)
检查您的代码。您出于某种原因(为什么?)将AngularJS $filter
作为filter
传递给您的控制器,如果您的控制器请求注入,那么这可能会有效,但是您尝试使用{{1}测试代码中的变量,其值未定义。如果您想在以后使用它,请在filter
中设置值:
beforeEach()
此外,我不确定您是否只是在调试,或者提供的代码是否显示您正在尝试执行的操作。如果是后者,请注意单元测试应该从外部"测试您的单元。因此,如果结果符合您的预期,那么它应该真正调用您的filter = $filter;
一些数据并进行测试。您不能将功能内部复制到测试中。
答案 1 :(得分:0)
describe('Service: myService', function () {
beforeEach(module('myApp'));
var myService,
httpBackend,
fromDate,
toDate;
var d = new Date();
beforeEach(inject(function (_myService_, $httpBackend, $filter) {
myService = _myService_;
httpBackend = $httpBackend;
fromDate = $filter('date')(new Date(d - 86400000 * 15), 'yyyy-MM-dd');
toDate = $filter('date')(d, 'yyyy-MM-dd');
}));
// ...
}