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

});

「呼び出されると予想される関数」が表示されます。

Ajax 成功メソッドを正常にテストするにはどうすればよいですか?

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 呼び出しの成功をトリガーするため、success メソッド内にある機能をテストできます。

于 2012-12-04T11:11:23.487 に答える