diff --git a/lib/gitlab/ci/config/node/jobs.rb b/lib/gitlab/ci/config/node/jobs.rb
index 2df2d55aca28b56e6070cea59c3e9d9f72173dd8..915b46652f2a5cde54f44fe93379c8bd35c76125 100644
--- a/lib/gitlab/ci/config/node/jobs.rb
+++ b/lib/gitlab/ci/config/node/jobs.rb
@@ -11,6 +11,20 @@ module Gitlab
           validations do
             validates :config, type: Hash
           end
+
+          def nodes
+            @config
+          end
+
+          private
+
+          def create_node(key, essence)
+            Node::Job.new(essence).tap do |job|
+              job.key = key
+              job.parent = self
+              job.description = "#{key} job definition."
+            end
+          end
         end
       end
     end
diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
index bad439bc48937e990fa883eef7717647da5133de..49a786191b8dcd02946e486614cb2ec0323e4960 100644
--- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
@@ -1043,11 +1043,11 @@ EOT
         end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: services should be an array of strings")
       end
 
-      it "returns errors if there are unknown parameters" do
+      it "returns error if job configuration is invalid" do
         config = YAML.dump({ extra: "bundle update" })
         expect do
           GitlabCiYamlProcessor.new(config, path)
-        end.to raise_error(GitlabCiYamlProcessor::ValidationError, "Unknown parameter: extra")
+        end.to raise_error(GitlabCiYamlProcessor::ValidationError, "jobs:extra config should be a hash")
       end
 
       it "returns errors if there are unknown parameters that are hashes, but doesn't have a script" do
diff --git a/spec/lib/gitlab/ci/config/node/jobs_spec.rb b/spec/lib/gitlab/ci/config/node/jobs_spec.rb
index 3afa3de06c682ca27567ebcf21df7ed58be9ea95..7f80e11cea37193de5e4b7f2230d73c4b210fb0d 100644
--- a/spec/lib/gitlab/ci/config/node/jobs_spec.rb
+++ b/spec/lib/gitlab/ci/config/node/jobs_spec.rb
@@ -4,6 +4,8 @@ describe Gitlab::Ci::Config::Node::Jobs do
   let(:entry) { described_class.new(config) }
 
   describe 'validations' do
+    before { entry.process! }
+
     context 'when entry config value is correct' do
       let(:config) { { rspec: { script: 'rspec' } } }
 
@@ -33,4 +35,19 @@ describe Gitlab::Ci::Config::Node::Jobs do
       end
     end
   end
+
+  describe '#descendants' do
+    before { entry.process! }
+
+    let(:config) do
+      { rspec: { script: 'rspec' },
+        spinach: { script: 'spinach' } }
+    end
+
+    it 'creates two descendant nodes' do
+      expect(entry.descendants.count).to eq 2
+      expect(entry.descendants)
+        .to all(be_an_instance_of(Gitlab::Ci::Config::Node::Job))
+    end
+  end
 end