gpt4 book ai didi

javascript - 模拟服务返回对象($$state)错误

转载 作者:数据小太阳 更新时间:2023-10-29 04:17:59 26 4
gpt4 key购买 nike

我一直在关注 John Papa 和 Ward Bell 在 PluralSight 上进行的 Angular Testing Play by Play。

我目前在运行规范时遇到以下错误。

AssertionError: expected { Object ($$state) } to have a property 'length'
at Assertion.assertLength (bower_components/chai/chai.js:1331:37)
at Assertion.assert (bower_components/chai/chai.js:4121:49)
at Context.<anonymous> (scripts/home/homeController.Specs.js:48:49)

请注意,我只包含了我认为相关的代码,这样我就不会在这个问题上添加不相关的信息。如果您需要查看更多代码,这不是问题。

我的代码如下:

homeController.js:

window.app.controller('homeController', ['$scope', 'sidebarService',
function ($scope, sidebarService) {

$scope.title = 'Slapdash';
$scope.sidebar = {
"items": sidebarService.getSidebarItems()
};

}])

sidebarService.js:

(function () {
window.app

.service('sidebarService',['$http', function ($http) {

this.getSidebarItems = function () {
$http.get("http://wwww.something.com/getSidebarItems")
.then(function (response) {
return response.data;
});
};
}]);
}());

homeController.Specs.js:

在每个之前:

beforeEach(function () {

bard.appModule('slapdash');

bard.inject(this, '$controller', '$q', '$rootScope')

var mockSidebarService = {
getSidebarItems : function(){
return $q.when(mockSidebarMenuItems);
}
};

controller = $controller('homeController', {
$scope: scope,
sidebarService: mockSidebarService
});

});

失败的规范:

        it('Should have items', function () {
$rootScope.$apply();

expect(scope.sidebar.items).to.have.length(mockSidebarMenuItems.length); // same number as mocked
expect(sidebarService.getSidebarItems).to.have.been.calledOnce; // it's a spy

});

最佳答案

答案是我返回的是服务的结果而不是 promise 。

    $http.get("http://wwww.something.com/getSidebarItems")
.then(function (response) {
return response.data; // <- returning data not promise
});

当我在 mock 我在使用

var mockSidebarService = {
getSidebarItems : function(){
return $q.when(mockSidebarMenuItems);
}
};

它 mock 了一个 promise 。但是,我只需要返回数据,因为服务中正在等待 promise 。

       mockSidebarService = {
getMenuItems : function(){
return mockSidebarMenuItems
}
};

我进行了更改,现在一切正常。花了一段时间,但至少它是有道理的。

关于javascript - 模拟服务返回对象($$state)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37116752/

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