0

我正在开发一个类似于 Ogame 的游戏(https://github.com/arnlen/ogame-like)的培训应用程序。

我正在使用 rspec(与 Ca​​pybara 一起)来测试我的应用程序。我被堆叠了几个小时,因为 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”方法进行调试

  1. 将此添加到您的 gemfile 中:“ gem 'launchy'
  2. 安装它:捆绑安装
  3. 将命令“ save_and_open_page ”放在您想要的任何位置

希望它可以帮助。:)

4

1 回答 1

1

Capybara 也有一个save_page更容易使用的方法,因为它似乎不需要“启动”宝石。页面保存在tmp/capybara. 在 rspec 测试中,请务必使用save_pageinside beforeit或其他一些块。它不能作为单独的命令工作。例子:

    before { visit signup_path; save_page }
于 2013-03-19T14:30:23.940 回答