【发布时间】:2016-02-07 01:16:04
【问题描述】:
简单地说:
我可以在 jasmine 单元测试中匹配来自 $resource 服务的 mock-$httpBackend 数据吗?我该怎么做?
我想要什么:
当我使用 $httpBackend 和 $http 服务对我的后端服务进行 Jasmine 测试时,我可以这样做:
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
我将《幽灵的威胁》的所有信息都存储在 movieData 中。该测试通过了,因为它将从模拟后端接收的数据与应有的数据 (movieData) 进行比较。
我得到了什么:
当我使用 $httpBackend 和 $resource 服务对我的后端服务进行 Jasmine 测试时,情况有所不同。
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
业力告诉我:
预期 [ Resource({ id: 1, des: 'This is one.' }), Resource({ id: 2, des:“这是两个。” }), Resource({ id: 3, des: '这是三个。' }) ] 等于 [ Object({ id: 1, des: 'This is one.' }), Object({ id: 2, des:“这是两个。” }), Object({ id: 3, des: '这是三个。' }) ].
因此,它们不是“对象”,而是“资源”。
感谢您能给我的任何指导。
【问题讨论】:
-
是否可以将 dataToCheck 中的 JSON 对象转换为资源?
标签: angularjs unit-testing karma-jasmine angular-resource httpbackend