gpt4 book ai didi

javascript - 我们如何模拟我们的服务来测试 Controller ?

转载 作者:行者123 更新时间:2023-11-28 20:55:11 24 4
gpt4 key购买 nike

我是 Angular js 的新手,正在尝试测试 Controller 。

我有这样的服务:

angular.module('test'){

service.getAllServices = function()
{
var fullPath = url
var deferred = $q.defer()

if(!$.isEmptyObject(service.allServices))
deferred.resolve(service.allServices)
else
$http.get(fullPath)
.success(function(data,status,headers,config){
service.allServices = data
deferred.resolve(service.allServices)
})
.error(deferred.object)

return deferred.promise;
}


})

Controller 看起来像这样:

angular.module('test')
.controller('MainCtrl', function ($scope,$http,HttpService) {
$scope.awesomeThings = [
"Loading"
];


$scope.loadServices = function()
{
HttpService.getAllServices().then(function(result){
// console.log("Success")
$scope.awesomeThings = result.entities
},function(reason){
console.log(reason)
})
};

我有一个这样的测试用例:

describe('Testing controller', function () {

// load the controller's module
beforeEach(module('test'));

var MainCtrl,
scope;

// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope,$q,HttpService) {
scope = $rootScope.$new();

var deferred = $q.defer();
var response = {
things: 'and stuff'
}

deferred.resolve(response);
spyOn(HttpService, 'getAllServices').andReturn(deferred.promise);

MainCtrl = $controller('MainCtrl', {
$scope: scope,
HttpService : HttpService
});

scope.loadServices();
}));


it('Controller is dummy, just gives back, what services gives back', function () {
expect(scope.awesomeThings).toEqual({
things: 'and stuff'
});
});


});

即使我正在注入(inject) deferred 对象,看起来我的测试用例仍然失败,并显示以下消息:

Expected [ 'Loading' ] to equal { things : 'and stuff' }.

我哪里出错了?

最佳答案

您需要调用 digest 来强制运行 promise 成功函数。您可以在测试中执行此操作,或在调用 loadServices 后的设置中执行此操作,如下所示:

scope.loadServices();
scope.$digest();

希望这对您有所帮助。

关于javascript - 我们如何模拟我们的服务来测试 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26334742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com