小编acl*_*ve1的帖子

角度资源承诺捕获,茉莉花toThrow()

我在角度控制器中有一些代码:

user是一个angular $资源,在调用get方法时返回一个promise.

$scope.credentials = {
        username:"",
        password:"",
        rememberMe:false
    };

var currentUser  = {};

$scope.login = function(callback){
        user.get($scope.credentials)
            .$promise
            .then(function(user){
                $scope.currentUser = user;
                return cb ? cb(user) : user;
            })
            .catch(function(res){
                throw "LoginError";
            });

};
Run Code Online (Sandbox Code Playgroud)

我正试图测试它是否抛出错误与茉莉如此:

expect(function(){
  scope.login();
}).toThrow();
Run Code Online (Sandbox Code Playgroud)

但是抛出了这个错误:

抛出异常的预期函数.

我已经测试了承诺的接受度,它按预期工作,但我假设有一些我无法处理的异步方面.

我也试过调用传入并调用done(),但这也不起作用.

编辑:

我这样嘲笑我的后端:

beforeEach(inject(function($rootScope,$controller,_$httpBackend_){



            $httpBackend = _$httpBackend_;
            successCallback = jasmine.createSpy();
            errorCallback = jasmine.createSpy();


            scope = $rootScope.$new();
            controller = $controller('LoginController',{
                '$scope':scope
            });

        }));

afterEach(function(){
            $httpBackend.verifyNoOutstandingExpectation();
            $httpBackend.verifyNoOutstandingRequest();
        });
Run Code Online (Sandbox Code Playgroud)

请注意,我的其他测试确实有效,我尝试了其他场景,其中服务器返回200和用户,一切正常.我专门测试$ scope.login()在收到服务器错误时是否抛出错误.

javascript jasmine angularjs karma-jasmine angular-mock

2
推荐指数
1
解决办法
1264
查看次数

Chrome 扩展:查询标签异步

我有两个变量被设置为函数的“返回值”,这些函数是获取选项卡的 URL 和对实际选项卡对象的引用,并将它们存储在变量中。我有一些代码:

function init(){
    var url = getUrl();
    var tab = getTab();
}

function getUrl(){
    var tablink;
    chrome.tabs.query({currentWindow: true, active: true},function(tabs){
        tablink = tabs[0].url;
        return tablink;
    });

}

function getTab(){
    var tab;
    chrome.tabs.query({currentWindow: true, active: true},function(tabs){
        tab = tabs[0];
    });
    return tab;
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样,URL 未定义,虽然我从回调函数内部返回 URL,但是当我从回调外部返回选项卡时,它返回正常,就好像这是一个同步调用。我在调试器中有这个现象的截图。我正在尽最大努力学习如何处理 chrome 中的异步方法,但这很令人困惑。有人可以向我解释这种行为吗?

javascript asynchronous google-chrome google-chrome-extension

1
推荐指数
1
解决办法
4221
查看次数