测试Ajax茉莉花Sinon

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?

Well I would have used sinon.fakeServer before but I didn't realise that it triggers the success of the original ajax call.

So the solution was to do this:

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 will trigger the success of the ajax call in the feature so that you can test any functionality that you may have in the success method.