首页 新闻 会员 周边

angular 测试问题

0
悬赏园豆:30 [已解决问题] 解决于 2014-10-09 14:53
describe('Controllers: CheckListOverCtrl', function () {
    var $scope, ctrl, $httpBackend;

    beforeEach(angular.mock.module('app.audit'));

    beforeEach(angular.mock.inject(function ($rootScope, $controller, _$httpBackend_) {
        $httpBackend = _$httpBackend_;
        $httpBackend.when('GET','/Services/AuditWebForm.aspx/GetCheckListOver').
           respond([{ name: 'name1', ProjectName: "ProjectName1", I_Category: "I_Category1", uName: "uName1", dName: "dName1", D_Create: "D_Create1" },
                    { name: 'name2', ProjectName: "ProjectName2", I_Category: "I_Category2", uName: "uName2", dName: "dName2", D_Create: "D_Create2" }]);

        $scope = $rootScope.$new();
        ctrl = $controller('CheckListOverCtrl', { $scope: $scope });
    }));

    it("标题测试", function () {
        expect($scope.$root.title).toBe('已审列表');
    });

    it("取数据测试", function () {
        $httpBackend.flush();
        expect($scope.list.length).toBe(2);
    });
});
 

这是我写的测试代码。 我想测试$scope.list 这样写错在哪里?

还有。 我想问下, 测试纸能写这种假返回值吗? 可以通讯后台方法吗? 要怎么写呢??

战马的主页 战马 | 初学一级 | 园豆:27
提问于:2014-10-08 16:51
< >
分享
最佳答案
0

你用的是什么测试框架?话说,我都没写过测试~

收获园豆:30
幻天芒 | 高人七级 |园豆:37175 | 2014-10-09 10:48

就写spec文件  再跑茉莉花。

战马 | 园豆:27 (初学一级) | 2014-10-09 10:50

@战马: https://docs.angularjs.org/api/ngMock/service/$httpBackend,你看这个文档~

幻天芒 | 园豆:37175 (高人七级) | 2014-10-09 10:51

@幻天芒: 需要翻~~~~墙?

战马 | 园豆:27 (初学一级) | 2014-10-09 10:55

@战马: 额,不急的话,我中午分析看看,现在正在fix bug~

幻天芒 | 园豆:37175 (高人七级) | 2014-10-09 11:07

@幻天芒: 好的。  谢谢

战马 | 园豆:27 (初学一级) | 2014-10-09 11:07

@战马: 看了下,好像没错样,出现什么错误了吗?

幻天芒 | 园豆:37175 (高人七级) | 2014-10-09 11:28

@幻天芒:  Cannot read property 'length' of undefined 

  一直在报错~~

战马 | 园豆:27 (初学一级) | 2014-10-09 11:30

@战马: 看你的controller中有个data.d,你这边构造的数据集合是不是应该放到d这个属性上去?你可以在expect($scope.list.length).toBe(2);上打个断点,看下list到底是个啥?

幻天芒 | 园豆:37175 (高人七级) | 2014-10-09 13:31

@幻天芒: 断点到不了expect这句,在flush()就报错了Cannot read property 'length' of undefined。

你这边构造的数据集合是不是应该放到d这个属性上去? 这句话怎么操作啊?

战马 | 园豆:27 (初学一级) | 2014-10-09 13:37

@战马: 就是说你Mock的数据一定要和真实数据的格式保持一致。

试下,在flush之前加上:$httpBackend.expectGET('/Services/AuditWebForm.aspx/GetCheckListOver');

幻天芒 | 园豆:37175 (高人七级) | 2014-10-09 14:03

@幻天芒: 还是一样的 。response里面我现在是data.d=[{...}] 这样了。还是报一样的问题Cannot read property 'length' of undefined。

战马 | 园豆:27 (初学一级) | 2014-10-09 14:08

@战马: 怎么解决问题的??

幻天芒 | 园豆:37175 (高人七级) | 2014-10-09 23:12

@幻天芒: 

expect($scope.list.length).toBe(0);
        $httpBackend.expectPOST('/Services/AuditWebForm.aspx/GetCheckList').respond(data);        
        $httpBackend.flush();
        expect($scope.list.length).toBe(2);

·先写好expectpost 再执行flush的时候就会按你写的expectpost来操作 ,截取请求 返回data

战马 | 园豆:27 (初学一级) | 2014-10-10 09:15

@战马: 呵呵~原来你是POST请求嗦...

幻天芒 | 园豆:37175 (高人七级) | 2014-10-10 09:50

@战马: 看你mock的是get请求呢,为什么你在这儿用expectPOST?用expectGET不行么?

幻天芒 | 园豆:37175 (高人七级) | 2014-10-10 09:51

@幻天芒: get post 都试过 。  最后只有这种才能跑出来结果。。。。

战马 | 园豆:27 (初学一级) | 2014-10-10 09:52

@战马: 有点奇怪,不清楚了。

幻天芒 | 园豆:37175 (高人七级) | 2014-10-10 11:14
其他回答(1)
0

$scope.list的定义哪去了

draculav | 园豆:734 (小虾三级) | 2014-10-09 13:22

$scope.list是在controller里,具体代码:

 //获得数据列表
        $scope.getlist = function (current, pagesize) {
            return $http.post('/Services/AuditWebForm.aspx/GetCheckListOver', { Current: current, pageSize: pagesize, findValue: $scope.query }).success(function (data) {
                $scope.list = angular.fromJson(data.d);
                if ($scope.list.length > 0) {
                    if ($scope.list[0].Total > 0) {
                        $scope.PageCount = ($scope.list[0].Total / $scope.pageSize);
                        $scope.PageCount = (($scope.list[0].Total % $scope.pageSize) != 0 ? parseInt($scope.PageCount) + 1 : $scope.PageCount);
                        $scope.PageCount = ($scope.PageCount == 0 ? 1 : $scope.PageCount);
                    }
                    nameConverter.ChangeUser();
                }
            }).error(function () {
                $scope.list = "";
            });
        }
支持(0) 反对(0) 战马 | 园豆:27 (初学一级) | 2014-10-09 13:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册