2012-11-28 79 views
1
describe('Ajax', function() { 
    beforeEach(function() { 
    // Instantiate module and reference it with this.testUser 
    this.testUser = new TestUser(); 
    // Reference sinon.spy with this.spySetToken 
    this.spySetToken = sinon.spy(this.testUser, 'setToken'); 
    }); 
    afterEach(function() { 
    this.spySetToken.restore(); 
    }); 
    it('Does it respond with that data', function() { 
    // Wrap $.ajax method and invoke success callback from ajax passing it a 'string'. 
    sinon.stub($, 'ajax').yieldsTo('success', 'Custom response string'); 
    // test to see if my method that's inside the success callback is called with the string 
    expect(this.spySetToken.toHaveBeenCalledWith('Custom response string'); 
    }); 

}); 

我得到'期望函数被称为'。测试阿贾克斯茉莉花sinon

如何成功测试Ajax成功方法?

+0

那么你的测试似乎没有做任何Ajax调用(你只是设置间谍)。你确定你不缺少代码吗? – HoLyVieR

回答

1

那么我会使用sinon.fakeServer之前,但我没有意识到,它触发原始ajax调用的成功。

因此,解决办法是要做到这一点:

beforeEach(function() { 
    var server = sinon.fakeServer.create(); 
    this.server.respondWith(
    "GET", 
    "/the/url" // This should marry up to the url being tested i believe 
    [200, {"Content-Type":"application/json"}, 
    '{response:"json"}'] 
); 
}; 

it('should set my model', function() { 
    this.server.respond(); 
    expect(myModel.get('property').toEqual('); 
} 

Sinon.server将触发Ajax调用成功的功能,让你可以测试你可能有成功的方法的任何功能。