19

実行するたびに「 UnknownError: unknown error: Maximum call stack size exceeded.」をスローするテストがあります。

このテストは、私のサービスの 1 つで、Google ドライブに書き込むメソッドを呼び出しています。

失敗しているテストは、ドライブ アイテムを更新することを意味する「ui」で doDrive 関数を呼び出しています。「ui」->「ni」という 1 文字を変更すると、新しいドライブ アイテムが作成され、テストは機能します。テスト対象のコードは、通常の使用では問題なく動作します。

it('should update a file', function() {
browser.executeAsyncScript(function(callback) {
    // get service
    var service=angular.element(document.getElementById('ngapp')).injector().get('DriveQ')
    // generate a title
    var title = 'title of file';
    // call doDrive to create a new file
    service.doDrive({t:'ui',id:'0B6B-RNrxsCu2Sll7JZTYy2aDA', item:{title:title}})
        .then(function (resp){
                    resp.originalTitle=title;
                    callback(resp)
            });
}).then(function(resp) {
    expect(resp.title).toEqual(resp.originalTitle);
});
});

私はchrome webdriverを直接使用していますが、browser.ignoreSynchronization = true;

4

1 に答える 1

18

私は同じ問題を抱えています。大きなオブジェクトをブラウザーから分度器に返すと、「UnknownError: 不明なエラー: 最大呼び出しスタック サイズを超えました」というエラーが発生することがわかりました。

コールバックで送り返すオブジェクトの複雑さを確認する必要がrespあります。大きすぎる場合は、送り返すデータを少なくしてください。

これはexecuteAsyncScriptexecuteScriptおよびevaluate( を使用するexecuteScript) で発生する可能性があります。

OPで編集...

callback(resp)に変更すること で修正しましたcallback({title:resp.title})。つまり、返されたオブジェクトを簡素化して、アサートしているアイテムのみを含めます。

于 2014-09-25T09:20:29.467 に答える