对于[]的未定义方法`visit':在2019年的RSpec 3特征测试中的数组

问题描述 投票:0回答:1

我试图让这个最简单的功能测试运行。使用RSpec 3语法,ruby-2.5.1,在2019年使用的rails 5:

RSpec.feature "Roots", type: :feature do
  fixtures :page_model
  fixtures :event
  fixtures :level
  fixtures :phase

  it "loads the homepage" do
    visit root_path
    expect(page).to have_content 'Team'
  end

  it "loads a page" do
    p = page(:page2)
    puts p.name
    visit page_path(p)
    expect(page).to have_content p.body
  end
end

但我总是得到一个错误

 NoMethodError:
   undefined method `visit' for []:Array
 # /Users/someuser/.rvm/gems/ruby-2.5.1@rails5/gems/capybara-3.16.1/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
 # ./spec/features/root_spec.rb:10:in `block (2 levels) in <top (required)>'

请注意,错误发生在该行

visit root_path

这根本与页面无关。

我把它缩小到第一个夹具文件:如果我评论它

RSpec.feature "Roots", type: :feature do
  # fixtures :page
  fixtures :event
  fixtures :level
  fixtures :phase

  it "loads the homepage" do
    visit root_path
    expect(page).to have_content 'Team'
  end
end

然后测试运行没有错误并成功。但我找不到夹具文件的问题:

page1:
  id: 1
  cached_slug: info
  name: "Information"
  body: "this and that"
  created_at: "2011-03-01 10:09:53"
  updated_at: "2016-07-21 12:15:46"
  visibility: visibility_public

page2:
  id: 2
  cached_slug: impressum
  name: "Impressum + Kontakt"
  body: "dies ist ein Projekt"
  created_at: "2011-03-01 10:09:53"
  updated_at: "2016-12-05 10:42:30"
  visibility: visibility_public
ruby-on-rails rspec rspec-rails
1个回答
0
投票

夹具不能被称为page.yml,因为它创建了一个方法page(),用于从夹具加载。这会覆盖由page隐式设置的visit:表示刚刚加载的页面的对象。

我不得不将fixture文件的文件名更改为page_model.yml,然后加载:

RSpec.feature "Roots", type: :feature do
  fixtures :page_model
  fixtures :event
  fixtures :level
  fixtures :phase

  it "loads the homepage" do
    visit root_path
    expect(page).to have_content 'Team'
  end

  it "loads a page" do
    p = page_model(:page1)
    puts p.name
    visit page_path(p)
    expect(page).to have_content p.body
  end
end

请注意,现在我可以使用page_model(:page1)来加载夹具。

Set model name in fixtures as metadata中,我了解到您可以在fixture文件中指定模型的类:

_fixture:
  model_class: Page

page1:
  id: 1
  cached_slug: info
  name: "Information"
  body: "this and that"
  created_at: "2011-03-01 10:09:53"
  updated_at: "2016-07-21 12:15:46"
  visibility: visibility_public

page2:
  id: 2
  cached_slug: impressum
  name: "Impressum + Kontakt"
  body: "dies ist ein Projekt"
  created_at: "2011-03-01 10:09:53"
  updated_at: "2016-12-05 10:42:30"
  visibility: visibility_public
© www.soinside.com 2019 - 2024. All rights reserved.