4

非同期呼び出しで AngularJS サービスをテストするために Karma + Mocha を使用しています。非同期呼び出しが完了したことをテストに伝えるにはどうすればよいですか。つまり、標準の Mocha done() 関数はどこに行くのでしょうか?

var should = chai.should();
describe('Services', function() {
  beforeEach(angular.mock.module('myApp'));
  describe('sampleService', function(){
    it.only('should return some info', angular.mock.inject(function(sampleService) {
      sampleService.get(function(data) {
        data.should.equal('foo');
        //done()
      });
    }));
  });
});
4

2 に答える 2

4

ふぅ…知ってた。

var should = chai.should();
describe('Services', function() {
  beforeEach(angular.mock.module('myApp'));
  describe('sampleService', function(){
    it.only('should return some info', function(done) {
      angular.mock.inject(function(sampleService) {
        sampleService.get(function(data) {
          data.should.equal('foo');
          done();
        });
      });
    });
  });
});
于 2013-11-03T04:05:34.673 に答える
1

これは私が便利だと思ったパターンです。インジェクションはテストの前に行われ、promise で動作します。私の場合、これを使用して、(LoginService によって行われた呼び出しからの) HTTP 応答のインターセプターの処理を検証します。

var LoginService, mockBackend;

beforeEach(function() {
  module('main.services');

  inject(function(_LoginService_, $httpBackend) {
    LoginService = _LoginService_;
    mockBackend = $httpBackend;
  });
});

describe('login', function() {
  it(' auth tests', function(done) {

    var url = '/login';

    mockBackend.expectPOST(url)
    .respond({token: 'a.b.c'});

    LoginService.login('username', 'pw')
    .then(function(res) {
      console.log(' * did login');
    })
    .finally(done);

    mockBackend.flush();
  });

});

afterEach(function() {
  mockBackend.verifyNoOutstandingExpectation();
  mockBackend.verifyNoOutstandingRequest();
});
于 2015-03-11T21:04:53.507 に答える