在jasmine单元测试中匹配来自$ resource服务的mock- $ httpBackend数据

时间:2016-02-07 01:16:05

标签: angularjs unit-testing karma-jasmine angular-resource httpbackend

简单地说:

我可以在茉莉花单元测试中匹配来自$ resource服务的mock- $ httpBackend数据吗?我该怎么做?

我想要的:

当我使用$ httpBackend和$ http服务测试我的后端服务时,我可以这样做:

  it("should return movie search data from the title", function() {
    var movieData = { title: "The Phantom Menace", description: "A movie.";
    var response = [];

    $httpBackend.when('GET', 'http://www.omdbapi.com/?v=1&s=the%20phantom%20menace')
      .respond(200, movieData);

    moviesService.search('the phantom menace')
      .then(function onSuccess(data) {
        response = data;
      });

    $httpBackend.flush();

    expect(response.data).toEqual(movieData);
  }); // end it

我将所有The Phantom Menace的信息存储在 movieData 中。此测试通过,因为它将从模拟后端接收的数据与它应该的数据(movieData)进行比较。

我得到的是什么:

当我使用$ httpBackend和$ resource服务测试我的后端服务时,事情就不同了。

 it("retrieves a bunch objects", function() {
    var result = {}, testArray = [];
    var dataToCheck = [
      { id: 1, "des": "This is one."},
      { id: 2, "des": "This is two."},
      { id: 3, "des": "This is three."}
    ];

    $httpBackend.whenGET('movies/api')
      .respond(dataToCheck);

    MovieResource.query().$promise.then(function (data) {
      result = data;
    });

    $httpBackend.flush();

    angular.forEach(result, function (resource) {
      testArray.push(resource);
    })

    expect(testArray).toEqual(dataToCheck);
  }); // end it

业力告诉我:

  

预期[资源({id:1,des:'这是一个。'}),资源({id:2,   des:'这是两个。' }),资源({id:3,des:'这是三。'})]   等于[Object({id:1,des:'This is one。'}),Object({id:2,   des:'这是两个。' }),Object({id:3,des:'This is three。'})]。

因此,它们不是“对象”,而是“资源”。

我感谢你能给我的任何指导。

1 个答案:

答案 0 :(得分:0)

你需要做这样的事情

expect(testArray[0].id).toEqual(dataToCheck[0].id);
expect(testArray[1].id).toEqual(dataToCheck[1].id);
expect(testArray[0].des).toEqual(datatoCheck[0].des);

参考: documentation