使用Karma在Jasmine中没有解决承诺

时间:2015-11-09 18:15:41

标签: angularjs unit-testing jasmine

我有一个小业力单元测试的问题,应该检查一个简单的解密/加密服务。 问题是,如果我调用以下代码"手册" (即,在我的运行角度应用程序内)一切都很好,我收到预期的测试输出:

this.encryptDataAsync('Hello World of Encryption','b4b63cd1a64dbef72fefe2eb3e3fc3eb').then((encryptedValue : string) : void => {
    console.log('1',encryptedValue);
    this.decryptDataAsync(encryptedValue,'b4b63cd1a64dbef72fefe2eb3e3fc3eb').then(function(decryptedValue : string) : void{
        console.log('2',decryptedValue);
    });
});  

一旦我尝试运行这个Karma / Jasmine单元测试

describe('simple encryption/decryption', function() {
    var results = '';

    beforeEach(function(done) {
        _cryptoService.encryptDataAsync('ABC','b4b63cd1a64dbef72fefe2eb3e3fc3eb').then(function (encryptedValue){
            console.log('1');

            _cryptoService.decryptDataAsync(encryptedValue,'b4b63cd1a64dbef72fefe2eb3e3fc3eb').then(function(decryptedValue){
                console.log('2');
                results = decryptedValue;
                done();
            });

        });

    });

    it("check results", function(done){
        expect(results).toBe('ABC');
        done();
    }, 3000);
});

我从未到达console.log(' 1')也没有' 2'。我可以在调试单元测试时确认这一点。但是,这是整个套件中唯一失败的单元测试,所以我猜它不会出现模块等问题。

我的测试用例是否存在普遍问题?我原以为我可以使用then函数来处理我的测试用例,然后调用done()函数来调用断言部分。

更新/编辑: 该服务使用webcrypto作为库。除角度服务外,它完全独立于角度(因此,范围内没有变量等)

1 个答案:

答案 0 :(得分:0)

我需要调用scope.apply,因为“$ q与$ rootScope.Scope Scope模型观察机制在角度中集成,这意味着更快地将分辨率或拒绝传播到模型中并避免不必要的浏览器重绘,这将导致闪烁的用户界面。“