javascript - Jasmine 抛出一个错误 - 错误 : Timeout - Async callback was not invoked

标签 javascript jasmine

Jasmine 为我的第三个规范抛出一个错误。 错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时时间内未调用异步回调。

这是我的规范文件

describe('Address Book', function(){

    var addressBook,
        thisContact;

    beforeEach(function(){
        addressBook = new AddressBook(),
        thisContact = new Contact();
    });

    it('Should be able to add a contact', function(){
        addressBook.addContact(thisContact);
        expect(addressBook.getContact(0)).toBe(thisContact);
    });

    it('Should be able to delete a contact', function(){
        addressBook.addContact(thisContact);
        addressBook.delContact(1);
        expect(addressBook.getContact(1)).not.toBeDefined();
    });

});

describe('Async Address Book', function(){

    var addressBook = new AddressBook();

    beforeEach(function(done){
        addressBook.getInitialContacts(function(){
            done();
        });
    });

    it('Should be able to add a contact', function(done){
        expect(addressBook.initialContacts).toBe(true);
        done();
    });

});

这是我的 src 文件

function AddressBook(){
    this.contacts = [];
    this.initialContacts = false;
}
AddressBook.prototype.getInitialContacts = function(cb){

    var self = this;

    setTimeout(function(){
        self.initialContacts = true;
        if (cb) {
            return cb;
        }
    }, 3);

}

AddressBook.prototype.addContact = function(contact){
    this.contacts.push(contact);
}

AddressBook.prototype.getContact = function(index){
    return this.contacts[index];
}

AddressBook.prototype.delContact = function(index){
    this.contacts.splice(index,1);
}

我没有明白这个问题..请看一下..提前致谢。

最佳答案

问题出在 getInitialContacts 函数上。它从不调用提供的回调,它只是返回它。

    AddressBook.prototype.getInitialContacts = function(cb){

        var self = this;

        setTimeout(function(){
            self.initialContacts = true;
            if (cb) {
                return cb;
            }
        }, 3);

    }

应该将其更改为在异步操作完成时调用回调:

AddressBook.prototype.getInitialContacts = function(cb){

    var self = this;

    setTimeout(function(){
        self.initialContacts = true;
        if (typeof cb === 'function') {
            cb();
        }
    }, 3);

}

关于javascript - Jasmine 抛出一个错误 - 错误 : Timeout - Async callback was not invoked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36514468/

相关文章:

javascript - 使用 jquery 设置文本字段的值

javascript - Mongoose:向现有对象添加更多项目

php - 在 MySQL、PHP 或一般情况下排序时字符的优先级是多少?

javascript - Sublime Text : Different Snippet for JavaScript ES5 vs ES6?

angularjs - 模拟服务注入(inject) Angular 模块运行 block

Angular 2单元测试报错Unable to get property 'preventDefault' of undefined or null reference

javascript - 循环遍历嵌套数组

javascript - jQuery 表单输入到数组中不起作用

javascript - 使用 DOM 的 Angular Controller 中的测试函数

javascript - Jasmine - 在执行测试之前等待异步库完全加载