【问题标题】:Jasmine throws one error - Error: Timeout - Async callback was not invokedJasmine 抛出一个错误 - 错误:超时 - 未调用异步回调
【发布时间】:2016-04-09 08:22:04
【问题描述】:

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();
    });

});

这是我的源文件

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);
}

我没有得到问题..请看一下..提前谢谢。

【问题讨论】:

    标签: javascript jasmine


    【解决方案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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2019-01-07
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多