如何检查 angular 中对象的 属性?

how to check the property of object in angular?

我正在尝试在调用 $http 请求后更新对象的 属性。我还使用 karma 测试该值 jasmine.But 我的测试失败了,为什么?

我的对象 属性 的初始值为

**$scope.name='apple';**

成功后我替换了那个值

data.getData().then(function(data){
          console.log(data);
             $scope.name=data.data.name;

    })

我测试了这个但是我的测试用例失败了为什么这是我的代码

http://plnkr.co/edit/ING6xCdNh8oqfurHWLAl?p=preview

  afterEach(function () {
    $httpBackend.verifyNoOutstandingRequest();
    $httpBackend.verifyNoOutstandingExpectation();
  });
it('gets a name from data.json and check', function () {
    $httpBackend.whenGET('data.json').respond({ id: 123 });
    data.getData('data.json').then(function(response) {
      user = response;
    })
    $httpBackend.flush();
  expect($scope.name).toEqual('test');
  });

我已经编辑了你的 plunker http://plnkr.co/edit/uwWG8wUmo7VNCDNfV4E9?p=preview

几乎没有遗漏什么,首先我将预期的 http 调用移到了 beforeEach,否则所有测试都会因意外的 http 请求而失败,因为每次创建控制器时都会发生请求

在下面的测试代码中,您 return 调用 data.json 一个对象 {id: 123}

$httpBackend.whenGET('data.json').respond({
    id: 123
});

但在控制器中,您将响应的名称 - {id: 123} 分配给 $scope.name

data.getData().then(function (data) {
    console.log(data);
    $scope.name = data.data.name;
})

然后测试显然失败说未定义不等于 test 所以你在测试响应中需要的是:

$httpBackend.whenGET('data.json').respond({
    id: 123,
    name: 'test'
});

你必须记住 $scope.$digest()$httpBackend.flush()

的那种操作