一般是测试逻辑,不是测试UI的。按照你的说法,你是要测试UI操作了。
$scope.print = function (printid) { return $http.post('/Services/FinanceWebForm.aspx/GetExpensePrint', { id: printid }).success(function (data) { $('#divPrt').html(''); $scope.ExpensePrint = data.d; var I_PayTypeModel = [1, 2, 4];//类型的参照 $scope.ExpensePrint[0].C_PayType = GetPayType(GetValue(I_PayTypeModel, $scope.ExpensePrint[0].C_PayType)); if ($('#divPrt table').text() == "") { $scope.print(printid); } else { $scope.printExpense(); } }).error(function () { }); }
那比如我要测试这个方法呢?
it("Print测试", function () { $httpBackend.expectPOST('/Services/GetExpensePrint.ashx').respond(""); $scope.print(); expect($scope.ExpensePrint).toBe(""); });
我这样写不起效果。我把$scope.print()换成$httpBackend.flush();的话。执行的是页面加载的方法。并不是print方法。
@战马: 测试这个方法,不需要再expectPOST了吧。去掉这句。
还有/Services/FinanceWebForm.aspx/GetExpensePrint这个请求,你需要先在before那个方法中模拟一个结果。
@幻天芒:
it("Print测试", function () { $scope.print();//测试print方法 $httpBackend.expectPOST('/Services/BindFunction.ashx').respond(""); $httpBackend.expectPOST('/Services/FinanceWebForm.aspx/ListExpense').respond(data); data.d = ""; $httpBackend.expectPOST('/Services/FinanceWebForm.aspx/GetExpensePrint').respond(data); $httpBackend.flush(); expect($scope.ExpensePrint).toBe(""); });
要这样测试~~~
@战马: 好吧,写的测试代码比本身代码还多...
it("Print测试", function () { $scope.print();//测试print方法 $httpBackend.expectPOST('/Services/BindFunction.ashx').respond(""); $httpBackend.expectPOST('/Services/FinanceWebForm.aspx/ListExpense').respond(data); data.d = ""; $httpBackend.expectPOST('/Services/FinanceWebForm.aspx/GetExpensePrint').respond(data); $httpBackend.flush(); expect($scope.ExpensePrint).toBe(""); });