1

共有された例の実行に問題があります。共有された例は、常に例のリストの最後で実行されます。すべての例を順番に実行する方法は?

次のような仕様の例を共有しました

sharedExamples_spec.rb

shared_examples "upload jar" do |msg|
  it "shared examples group" do
    sleep(10)
    p "hello there :2 #{msg}"
  end 
end

そして他のスペックファイルで

require 'sharedExamples_spec.rb'

    describe "something" do

       before(:each) do
         @spec = "something group"
       end


 it "1: does something" do
   puts "hello there:1 #{@spec}"
 end

 describe "shared example" do
   it_should_behave_like "upload jar"," shared group"
end

it "3: does something" do
  puts "hello there:3 #{@spec}"
end

end

私が得るRspec出力は

something
 hello there:1 something group
  1: does something
 hello there:3 something group
  3: does something
 shared example
   it should behave like upload jar
    "hello there :2  shared group"
  shared examples group

 Finished in 1 second
  3 examples, 0 failures

出力を見ると、最後の例として Shared examples が実行されます。書かれている順序でテストを実行する方法を誰でも提案できますか。

4

1 に答える 1

1

この現象は、共有された例自体とは何の関係もないと思います。describe以下に示すように、RSpecは特定のブロック内で、itネストされたdescribe例を実行する前にすべての例を実行するように見えます。

describe "order test" do
  it {puts 1}
  describe "nested describe" do
      it {puts "2"}
    end
  it {puts 3}
end

これは以下を生成します:

1
.3
.2
.

テスト順序に依存しないというコメントにもかかわらず、ブロックを同じレベルのdescribe前に実行したい場合は、独自のブロックitに配置する必要があると思います。あなたの場合、次のようになります。itdescribe

describe "something" do

  before(:each) do
    @spec = "something group"
  end

  shared_examples "upload jar" do |msg|
    it "shared examples group" do
      p "hello there :2 #{msg}"
    end 
  end

  describe "example 1" do
    it "1: does something" do
      puts "hello there:1 #{@spec}"
    end
  end

  describe "shared example" do
    it_should_behave_like "upload jar"," shared group"
  end

  describe "example 3" do
    it "3: does something" do
      puts "hello there:3 #{@spec}"
    end
  end

end

これは以下を生成します:

hello there:1 something group
."hello there :2  shared group"
.hello there:3 something group
.
于 2013-09-09T15:10:31.907 に答える