rspec中的shared_examples与shared_context有什么不同

What is the real difference between shared_examples and shared_context ?

My observations :

  1. I can test same things using both (i.e. with shared_examples or shared_context)

  2. But some of my other tests fails if I use later one.

Observation #1 :

I compared shared_examples and shared_context per documentation onhttps://www.relishapp.com/

Syntactical differences are :

  • shared_context to define a block that will be evaluated in the context of example groups by implicitly matching metadata

Example :

shared_context "shared stuff", :a => :b do
  ...
end
  • The way these are included or called from a test file

shared_examples

include_examples "name"      # include the examples in the current context
it_behaves_like "name"       # include the examples in a nested context
it_should_behave_like "name" # include the examples in a nested context

shared_context

include_context "shared stuff"

Observation #2

I have a test case

shared_context 'limit_articles' do |factory_name|
  before do
    @account = create(:account)
  end

  it 'should restrict 3rd article' do
    create_list(factory_name, 3, account: @account)

    article4 = build(factory_name, account: @account)
    article4.should be_invalid
  end

  it 'should allow 1st article' do
    ...
  end

  it 'should allow 2nd article' do
    ...
  end
end

And include the context in a spec file which already has one shared_context included, then the existing one fails. But I change the order then all my test passes

Fails

include_context 'existing_shared_context'

include_context 'limit_articles'

Also if I replace the shared_context with shared_examples and accordingly include it in test case.

Passes

include_context 'existing_shared_context'

it_behaves_like 'limit_articles'

原文:http://stackoverflow.com/questions/21117123/rspec-shared-examples-vs-shared-context
posted @ 2016-05-11 13:57  PointNet  阅读(480)  评论(0编辑  收藏  举报