我正在开发一款类似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)>'
这是涉及的代码。
我的函数“ sign_in ”由rspec 使用(位置: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
我的 UsersController
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
[...]
我的 PlanetsController
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引发了错误“未定义的方法”
我还尝试通过我的spec文件上的迭代逐步调试,并且显示错误发生在“click_button'Veridate'”之后。由于未知原因,rspec似乎无法到达planets_path(来自PlanetsController的“index”操作)。
我出去了,如果有人有想法,我就接受了!
使用Capybara的“ save_and_open_page ”方法,我弄清楚发生了什么:由rspec创建的行星没有任何坐标,模型不允许这样做。
希望它可以提供帮助。 :)
答案 0 :(得分:1)
Capybara还有一个save_page
方法,它更容易使用,因为它似乎不需要&#34; launchy&#34;宝石。页面保存在tmp/capybara
中。在rspec测试中,请务必在save_page
,before
或其他块中使用it
。它不能作为单独的命令工作。示例:
before { visit signup_path; save_page }