【问题标题】:Angular Karma Jasmine - test functionAngular Karma Jasmine - 测试功能
【发布时间】:2018-01-31 12:41:17
【问题描述】:

基本上我必须测试这个下面的函数,我正在从文本文件中读取

$window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (dir) {
    var path = 'somefile.txt';                    
    dir.getFile(path, { create: true }, function (file) {
        file.file(function (file) {
            var reader = new FileReader();
            reader.onloadend = function () {                               
                resolve(this.result);
            }
            reader.readAsText(file);
        });
    }, error); 
}, error);

我一直在编写用于读取文件的单元测试用例

describe('get data from file', function () {            

    it('should read the files from the data', function () {
        var syncFile = 'somefile.txt';

        expect( ).toBe( );
    });
});

如何为文件读取器编写单元测试以读取文件? PS:我是使用业力进行单元测试的新手

【问题讨论】:

    标签: javascript angularjs unit-testing karma-jasmine


    【解决方案1】:

    您不应该直接使用 FileReader。将该行更改为

    var reader = new $window.FileReader();
    

    在您的测试中模拟 $window 并返回一个自定义 FileReader 对象。然后对此进行测试。如下所示。

    describe('get data from file', function () {
    
        var $window, fileReader;
    
        beforeEach(function () {
    
            inject(function (_$window_) {
                $window = _$window_;
            });
    
            fileReader = function () {
                return {};
            };
    
            spyOn($window, "FileReader").and.returnValue(fileReader);
        });
    
        it('should read the files from the data', function () {
            var syncFile = 'somefile.txt';
    
            expect($window.FileReader).toHaveBeenCalled();
       });
    });
    

    【讨论】:

    • 你能解释一下这是如何执行的吗?
    • @Matarishvan 你不明白哪一部分?总的来说,它为窗口对象中的 FileReader 方法创建了一个间谍。然后你可以使用这个间谍来注入你自己的预期行为并跟踪和测试对该方法的调用。
    • 所以基本上我必须在我的期望函数中传递我的确切函数?没有达到预期的效果以及如何使用它?
    • @Matarishvan 我已经更新了期望声明。基本上,这个测试是否调用了您的方法。同样,您可以监视 FileReader 调用返回的虚拟函数。并使用期望测试它们。请先查看 Jasmine 文档。 jasmine.github.io
    • @Matarishvan 请记住,在进行单元测试时,您是在测试小代码单元。您没有直接测试 FileReader 实现。您可能需要编写一个测试来验证是否调用了 reader.readAsText 以及是否创建了一个新的 FileReader 实例。您不需要直接测试实际的 FileReader。您可能还想测试是否正确处理了潜在错误,例如读取错误。您可以模拟 FileReader 并在调用适当的方法时强制它抛出错误。使用间谍验证错误处理程序已运行。
    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多