1
私はangular service
をテストしたいと思います。実データでテストしたいと思っています - a.k.a(統合テスト)。私はジャスミンとカルマを使用しています。ここで統合テストAngularJS +カルマ+ジャスミン
は私のテストで:
describe('Trending Data Service', function() {
var value = 0, originalTimeout = 0;
var service, Enums, $httpBackend;
// initialize module
beforeEach(module('waterfall'));
// initialize services
beforeEach(inject(function ($injector) {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
$httpBackend = $injector.get('$httpBackend');
service = $injector.get("trendingService");
Enums = $injector.get("Enums");
spyOn(service, 'fetch').and.callThrough();
}));
it('check if dependencies are defined', function() {
expect(service).toBeDefined();
expect(Enums).toBeDefined();
expect(service.categories).toBeDefined();
expect(service.fetch).toBeDefined();
});
it('categories array should be defined within the service', function() {
expect(service.categories.length).toEqual(9);
expect(service.categories).toEqual(jasmine.any(Array));
});
// this test is alway fails...
it('fetch method should return initial result', function (done) {
var promise = service.fetch(Enums.socials.viewAll, false);
promise.then(function (result) {
done();
}, function() {
expect(1).toBe(2);
done.fail('Error occured');
});
});
}
これはエラーです: Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
私は幅広いソリューションを試してみましたが、私はこれで任意の成功を持っていません。
EDIT:/ 4月/ 2016年29
var trendingService = function ($q, $http) {
var deferred = $q.defer();
var $this = this;
this.fetch = function (id) {
$http.get(url).then(function (result) {
deferred.resolve(result);
}).catch(function(err) {
deferred.reject(err);
});
return deferred.promise;
}
return {
fetch: $this.fetch;
};
};
var Enums = {
Roles: {
Admin: 1,
User: 2,
NotRegistered: 0
}
};
angular.module('').const('Enums', Enums);
ブラウザベースの回帰オートメーションスイートとテストについては、http://www.seleniumhq.org/をご覧ください。 –
e2eを使わずに具体的なサービスをチェックしたい場合はどうすれば役に立ちますか?具体的なデータが縛られているかどうかはわかりません。具体的なサービス内の特定のロジックにデータがバインドされていることを知りたい。私はC#のテストのように。 – IamStalker