:
class FooService {
/*@ngInject*/
constructor($resource) {
this.Foo = $resource('/foo/:fooId/',
{fooId: '@fooId'},
{
bar: {
method: 'GET',
url: '/foo/:fooId/bar/',
isArray: true
}
);
}
getAllFoo() {
return this.Foo.query();
}
}
はバーテスト可能でしょうか?
私は既にgetAllFoo()などのメソッドのテストを行っていますが、$ resourceアクションメソッドについてはあまりよく分かりません。
this.FooService.Foo.bar(params).$promise.then
のように、コントローラで直接使用することはできますか?
テストする必要がありますか? もしそうなら、どうですか?
編集:私はgetAllFooを()をテストする方法を知っている :
describe('FooService',() => {
let $rootScope, $resource, $httpBackend, $log, $interval;
let makeFooService, translateMock;
let mockAllFoo = [
{"id": 123,"stuff": "asdf asdf"},
{"id": 124,"stuff": "hjghjg"}
];
beforeEach(window.module(FooModule.name));
beforeEach(inject((_$rootScope_, $q, _$resource_, _$httpBackend_, _$log_) => {
$rootScope = _$rootScope_;
queryDeferred = $q.defer();
$resource = _$resource_;
$httpBackend = _$httpBackend_;
$log = _$log_;
translateMock = { use:() => ({}) };
makeFooService =() => new FooService(_$resource_);
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
describe('Service',() => {
it('has a resource-property [Foo]',() => {
let service = makeFooService();
expect(service.Foo).not.toBeNull();
});
it('should load all foos when getAllFoo() is called',() => {
$httpBackend.expect('GET', /(.+)\/foo/).respond(() => [200, mockAllFoo, 'success']);
let service = makeFooService();
let allFoo = service.getAllFoo();
$httpBackend.flush();
expect(allFoo.length).toBe(2);
});
は、だから私は)(getAllFooを()テストする方法が、バーをテストする方法を知っていません。 barがテスト可能で、コントローラで直接使用できる場合は、getAllFoo()などのメソッドを実行している点がわかりません.getAllFoo()は$ resourceアクションメソッドのラッパーです。私はここでベストプラクティスの明確化が必要です。
私はちょうど私のコードのタイプミスがあった、$リソース:$リソースは、あなたが約束を扱う必要のない特定の機能を提供し、あなたのようなVARに直接応答値を割り当てることができますアクションメソッドはテスト可能ですが、問題はありません。 – Olivvv