Rspecs“#its”方法的主题是什么

时间:2010-04-30 10:53:35

标签: ruby-on-rails ruby rspec

当你在rspec中使用它的方法时,如its(:code) { should eql(0)},'它'指的是什么。

我有以下规范可以正常使用

describe AdminlwController do

  shared_examples_for "valid status" do
    it { should be_an_instance_of(Api::SoapStatus) }
    it "should have a code of 0" do
      subject.code.should eql(0)
    end
    it "should have an empty errors array" do
      subject.errors.should be_an(Array)
      subject.errors.should be_empty
    end
    #its(:code) { should eql(0)}
  end

  describe "Countries API Reply" do 
    before :each do
      co1 = Factory(:country)
      co2 = Factory(:country)
      @result = invoke :GetCountryList, "empty_auth"
    end

    subject { @result } 
    it { should be_an_instance_of(Api::GetCountryListReply) }

    describe "Country List" do
      subject {@result.country_list}
      it { should be_an_instance_of(Array) }
      it { should have(2).items }
      it "should have countries in the list" do
        subject.each {|c| c.should be_an_instance_of(Api::Country)}
      end
    end

    describe "result status" do
      subject { @result.status }
      it_should_behave_like "valid status"
    end
  end

但是如果我然后取消注释its(:code)的行,那么我得到以下输出

AdminlwController Countries API Reply
- should be an instance of Api::GetCountryListReply

AdminlwController Countries API Reply Country List
- should be an instance of Array
- should have 2 items
- should have countries in the list

AdminlwController Countries API Reply result status
- should be an instance of Api::SoapStatus
- should have a code of 0
- should have an empty errors array

AdminlwController Countries API Reply result status code
- should be empty (FAILED - 1)

1)
NoMethodError in 'AdminlwController Countries API Reply result status code should be empty'
undefined method code for <AdminlwController:0x40fc4dc>
/Users/steveweet/romad_current/romad/spec/controllers/adminlw_controller_spec.rb:29:

Finished in 0.741599 seconds

8 examples, 1 failure

似乎“它”指的是整个测试的主题,即AdminLwController而不是当前主题。

我做错了什么或者这是一个Rspec奇怪的事情?

1 个答案:

答案 0 :(得分:0)

它在您编写its时使用主题。它不受代码进一步重新定义主题的影响。