railstutorial,这是RSpec 3不支持的弃用行为

时间:2014-01-14 12:11:11

标签: rspec rspec-rails railstutorial.org

我正在做轨道教程,现在是第11章。

为什么会出现这个错误?

  

警告:在another_user中访问声明before(:all)   挂钩:
  /Users/xxx/Documents/rails_projects/sample_app_2/spec/requests/micropost_pages_spec.rb:49:in   '阻止(4级)'

     

这是RSpec 3不支持的弃用行为。

     

letsubject声明无意在a中调用   before(:all)挂钩,因为它们存在以定义重置的状态   在每个示例之间,before(:all)存在以定义状态   在示例组中的示例之间共享。警告:让   声明another_userbefore(:all)钩子中访问:
  /Users/xxx/Documents/rails_projects/sample_app_2/spec/requests/micropost_pages_spec.rb:49:in   '阻止(4级)'

我的档案在这里。 enter link description here

2 个答案:

答案 0 :(得分:1)

您收到错误是因为您有以下代码:

let(:another_user) { FactoryGirl.create(:user) }
before(:all) do
  10.times { FactoryGirl.create(:micropost, user: another_user, content: "Foooo") }
end

其中before(:all)代码使用由another_user定义的let变量。

您可以通过将before(:all)调用更改为

来消除警告
before(:all) do
  user = FactoryGirl.create(:user)
  10.times { FactoryGirl.create(:micropost, user: user, content: "Foooo") }
end

请注意,当前在railstutorial.org上定义的教程不包含任何违反限制的代码。

答案 1 :(得分:0)

在我的环境中,以下代码可以使用。

  describe "delete links" do
    before(:all) do
      @another_user = FactoryGirl.create(:user)
      10.times { FactoryGirl.create(:micropost, user: @another_user, content: "Foooo") }
    end

    after(:all)  do
      Micropost.delete_all
      User.delete_all
    end

    before { visit user_path(@another_user) }

    it "should not create delete link for not current user" do
      Micropost.paginate(page: 1).each do |mp|
        should_not have_link("delete", href: micropost_path(mp))
      end
    end

    it { should have_content(@another_user.name) }
    it { should have_content("Foooo") }
  end