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

});

I'm getting 'Expected Function to be called'.

How do I test Ajax success methods successfully?

4

1 回答 1

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 调用成功,以便您可以测试成功方法中可能具有的任何功能。

于 2012-12-04T11:11:23.487 回答