我正在尝试运行这种最简单的功能测试。 使用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
与页面完全无关。
我将其范围缩小到第一个Fixture文件:如果我将其注释掉
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
答案 0 :(得分: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:
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