使用 capybara 进行 rspec2 验收测试
Posted
技术标签:
【中文标题】使用 capybara 进行 rspec2 验收测试【英文标题】:rspec2 acceptance testing with capybara 【发布时间】:2013-01-14 18:03:07 【问题描述】:我正在尝试使用 rspec2 和 rails3 实现一个功能,基本上我有一个 Post 模型,我试图通过创建一个 Post 来测试它(我正在使用设备进行身份验证)
这是我的特色
spec/acceptance/new_post_feature_spec.rb
require 'spec_helper'
require 'rspec/example_steps'
feature "Creating a new post" do
include Devise::TestHelpers
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.create(:user)
sign_in user
end
Steps "Add a new post" do
page.visit "/posts"
page.should have_content("New Post")
end
end
但是我收到了这个错误
undefined method `env' for nil:NilClass
以下是我正在使用的宝石
gem "rspec-rails", "~> 2.0"
gem 'database_cleaner'
gem 'capybara'
gem "factory_girl_rails", ">= 4.1.0"
gem 'rspec-example_steps'
Guard/Spork
任何帮助将不胜感激
【问题讨论】:
【参考方案1】:@request
是控制器测试变量。这不是你想要的。事实上,在 capybara 规范中,您不需要指定设计映射,也不能使用 sign_in
。
Capybara 启动浏览器,您必须告诉它进入您的登录页面并按照您在浏览器中执行的相同步骤登录。
试试这个:(您可能需要更改一些输入和按钮名称)
let(:user) FactoryGirl.create(:user)
before(:each) do
page.visit new_user_session_path
# note: use the email/password input names below if yours are different
page.fill_in "user[email]", :with => user.email
page.fill_in "user[password]", :with => user.password
page.click_button "Sign in"
end
【讨论】:
以上是关于使用 capybara 进行 rspec2 验收测试的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 中,我应该在 capybara(或集成)测试中包含用户输入表单错误流吗?
Capybara-webkit、rspec 集成规范和 xvfb:webkit_server:致命 IO 错误:客户端被杀死