如何测试和模拟返回arraybuffer的xmlhttprequest

时间:2015-05-13 18:52:55

标签: jasmine jasmine-ajax

我有一个角度应用程序,用户可以从他们的保管箱帐户中选择一个文件,然后应用程序下载该文件。这是代码。

$scope.$watchCollection('dropBoxFiles', function (newDBFiles) {
    $scope.invalidResume = false;
    if (newDBFiles.length > 0) {
        var mimeType = $scope.validateFile(newDBFiles[newDBFiles.length - 1].name);
        if (mimeType === ''){
            return false;
        }
        var remote = new XMLHttpRequest();
        remote.open('GET', newDBFiles[newDBFiles.length - 1].link);
        remote.responseType = "arraybuffer";
        remote.onload = function() {
            $scope.filename = newDBFiles[newDBFiles.length - 1].name;
            $scope.fileBlob = new Blob([remote.response], {type: mimeType});
            $scope.$digest();
        };
        remote.send();
    }
});

我正在努力尝试编写一个覆盖xmlhttprequest部分的测试。这是我到目前为止所得到的,但我收到了这个错误 -

TypeError: 'undefined' is not an object (evaluating 'request.respondWith')

我知道错误意味着什么,但我不确定为什么我会得到它。这是测试。

describe('dropbox watch collection ', function () {

    var testResponses = {
        results: {
            success: {
                status: 200,
                responseText: 'test text',
                response: '<html><body>hello</body></html>'
            }
        }
    };

    beforeEach(inject(function ($rootScope, $controller) {
        jasmine.Ajax.install();
        scope = $rootScope.$new();
        $controller('ApplyController', { $scope: scope});
    }));

    afterEach(function() {
        jasmine.Ajax.uninstall();
    });

    it('sets the scope filename to selected file if using a valid file type', function () {
        var selectedFile = {
            name: 'test.html',
            link: 'http://dropbox.com',
            mimeType: 'text/html'
        };

        scope.dropBoxFiles.push(selectedFile);
        scope.$digest();

        var request = jasmine.Ajax.requests.mostRecent();
        request.respondWith(testResponses.results.success);

        expect(scope.filename).toBe(selectedFile.name);
        expect(typeof scope.fileBlob).toBe('blob');
    });
});

0 个答案:

没有答案