我正在开发一个类似于 Ogame 的游戏(https://github.com/arnlen/ogame-like)的培训应用程序。
我正在使用 rspec(与 Capybara 一起)来测试我的应用程序。我被堆叠了几个小时,因为 rspec 正在抱怨一个错误 *我无法用我的浏览器自己重现 *。
这是我的rspec 代码:
describe 'Planet pages' do
let(:user){FactoryGirl.create(:user)}
before {sign_in user}
subject {page}
describe "new planet page" do
before {visit new_planet_path}
describe "with valid information" do
before do
visit new_planet_path
fill_in "Name", with: "MyPlanet"
click_button "Validate"
end
# This test doesn't pass
it {should have_selector('h1', text: "Planet")}
end
end
end
失败 :
1) Planet pages new planet page with valid information
Failure/Error: it {should have_selector('h1', text: "Planet")}
expected css "h1" with text "Planet" to return something
# ./spec/requests/planet_pages_spec.rb:34:in `block (4 levels) in <top (required)>'
这是涉及的代码。
rspec 使用的我的函数“ sign_in ” (位置:spec/support/utilities.rb)
def sign_in(user)
visit signin_path
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Sign in"
end
我的用户控制器
class UsersController < ApplicationController
before_filter :signed_in_user, only: [:index, :show, :edit, :update, :destroy]
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
redirect_to new_planet_path
else
render 'new'
end
[...]
我的行星控制器
class PlanetsController < ApplicationController
before_filter :signed_in_user
def index
@planets = current_user.planets
end
def new
@planet = Planet.new
end
def create
@planet = Planet.new(name: params[:planet][:name],
coordinates: generate_coordinates,
metal_ressource: 1000,
user_id: current_user.id)
if @planet.save
flash[:success] = "Welcome on your first planet!"
redirect_to action: 'index'
else
flash[:error] = "Error naming your planet"
render 'new'
end
end
end
和我的星球索引视图
<% @planets.each do |planet| %>
<h1>Planet : <%= planet.name %></h1>
<p><%= "Coordinates : #{planet.coordinates}" %></p>
<% end %>
我尝试使用 Capybara 方法“ save_and_open_page ”,但 rspec 引发错误“未定义方法”
我还尝试通过对我的规范文件进行迭代逐步调试,它显示错误发生在 "click_button 'Validate'" 之后。由于未知原因,rspec 似乎无法到达planets_path(来自PlanetsController 的“索引”操作)。
我出去了,如果有人有想法,我接受它!
编辑:已解决 - 发现问题!
使用 Capybara 的“ save_and_open_page ”方法,我弄清楚了发生了什么:rspec 创建的星球没有任何坐标,这是模型不允许的。
如何使用美妙的“save_and_open_page”方法进行调试
- 将此添加到您的 gemfile 中:“ gem 'launchy' ”
- 安装它:捆绑安装
- 将命令“ save_and_open_page ”放在您想要的任何位置
希望它可以帮助。:)