标签: rspec-rails

如何测试after_initialize轨道模型的回调?

我正在使用FactoryGirl和Rspec进行测试.如果为零,则模型在init之后设置外键.因此它使用另一个关联的数据.但我怎么测试呢?通常我会使用工厂来创建这个对象,并使用stub_chain作为"self.user.main_address.country_id".但是在创建此对象后,将调用initialize.我没有机会把它留下来.

after_initialize do
  if self.country_id.nil?
    self.country_id = self.user.main_address.country_id || Country.first.id
  end
end
Run Code Online (Sandbox Code Playgroud)

任何的想法?

rspec ruby-on-rails rspec2 rspec-rails ruby-on-rails-3

8
推荐指数
2
解决办法
2165
查看次数

当我使用Spork时,如何确保帮助程序和模型在RSpec中重新加载?

看起来我的助手(有时是我的模特)在每次使用Spork时都没有重新加载.我应该把什么放进我的"Spork.each_run"区块?

rspec ruby-on-rails helpers spork rspec-rails

8
推荐指数
2
解决办法
2241
查看次数

对于带有RSpec 2.10的Rails 3.2引擎,所有路由示例都失败

以正常的方式创建了一个Rails引擎,安装了RSpec,并为模型生成了一个脚手架,但我无法通过任何路由规范.

这是一个例子:

describe Licensing::LicensesController do
  it 'routes to #index' do
    get('/licensing/licenses').should route_to('licensing/licenses#index')
  end
end
Run Code Online (Sandbox Code Playgroud)

我正在虚拟应用程序中运行示例,如下所示:

$ cd spec/dummy
$ rake spec
/Users/brandan/.rvm/rubies/ruby-1.9.3-p194/bin/ruby -S rspec ../routing/licensing/licenses_routing_spec.rb
F

Failures:

  1) Licensing::LicensesController routes to #index
     Failure/Error: get('/licensing/licenses').should route_to('licensing/licenses#index')
       No route matches "/licensing/licenses"
     # /Users/brandan/repos/licensing/spec/routing/licensing/licenses_routing_spec.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.04345 seconds
1 example, 1 failure
Run Code Online (Sandbox Code Playgroud)

引擎正确安装在虚拟应用程序中:

# spec/dummy/config/routes.rb
Rails.application.routes.draw do
  mount Licensing::Engine => "/licensing"
end
Run Code Online (Sandbox Code Playgroud)

我可以进入虚拟应用程序并启动控制台并获得该路线就好了:

1.9.3p194 :001 > app.get('/licensing/licenses')
  Licensing::License Load (0.3ms)  SELECT "licensing_licenses".* FROM "licensing_licenses" 
200 …
Run Code Online (Sandbox Code Playgroud)

rails-engines rspec2 rspec-rails ruby-on-rails-3.2

8
推荐指数
2
解决办法
2997
查看次数

为什么这个rspec请求规范没有更新模型?

我有与User模型交互的请求规范.我想确保具有Admin角色的用户可以创建/编辑/销毁用户.我现在遇到问题,编辑操作不会更新用户.当我手动浏览网站上的操作时,一切正常,但测试无法更新用户.

这是我的规格:

it 'edits a user' do
  @user = FactoryGirl.create(:user)
  visit new_user_session_path unless current_path == new_user_session_path
  fill_in "Email", :with => @user.email
  fill_in "Password", :with => @user.password
  click_button "Sign In"
  user_to_edit = FactoryGirl.create(:user, first_name: "John", last_name: "Smith")
  visit edit_user_path(user_to_edit) unless current_path == edit_user_path(user_to_edit)
  fill_in 'user_last_name', with: "Changed"
  expect{
    click_button "Do it"
  }.to change { user_to_edit.last_name }.from("Smith").to("Changed")
  page.should have_content "John Changed"
end
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Failure/Error: expect{
       result should have been changed to "Changed", but is now "Smith"
Run Code Online (Sandbox Code Playgroud)

如果我将测试的最后几行更改为:

  fill_in 'user_last_name', with: "Changed"
  click_button …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise capybara cancan rspec-rails

8
推荐指数
1
解决办法
2366
查看次数

Zeus在运行RSpec时抛出错误

我遇到了Zeus和RSpec的许多用户似乎遇到的情况.

假设我有以下规范:

# spec/views/messages/show.html.erb

require 'spec_helper'

describe "messages/show.html.erb" do
  it "displays the text attribute of the message" do
    render
    rendered.should contain("Hello world!")
  end
end
Run Code Online (Sandbox Code Playgroud)

以及它测试的以下视图模板.

# app/views/messages/show.html.erb

Hello world!
Run Code Online (Sandbox Code Playgroud)

我的pwd是rails app的根源.当我跑步时,rspec我收到以下回复:

user@host $ rspec
.

Finished in 0.06264 seconds
1 example, 0 failures

Randomized with seed 9609
Run Code Online (Sandbox Code Playgroud)

一切都很好看.但是,如果我运行测试zeus rspec spec(zeus rspec根本不起作用),我会得到以下输出.

user@host $ zeus rspec spec
.

Finished in 0.07292 seconds
1 example, 0 failures

Randomized with seed 0

F

Failures:

  1) messages/show.html.erb displays …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails zeus rspec-rails

8
推荐指数
1
解决办法
1524
查看次数

在Windows上使用Guard和rspec更改文件时,测试不会运行

我已经安装了guard-rspec gem用于我的rails应用程序.当我从命令行启动后bundle exec guard,它第一次运行我的整个测试套件没有问题.

但是,每当我对我的Guardfile中指定的spec文件或任何监视文件进行任何更改时,Guard似乎都无法识别这些更改,也不会重新运行任何测试.

我甚至尝试在我的Guardfile中放置一些显式内容,如下所示:

watch("app/views/orders/new.html.erb")          { "spec/requests/orders_spec.rb" }
Run Code Online (Sandbox Code Playgroud)

orders_spec.rb当我编辑并保存new.html.erb正确时应该触发我的测试?好吧,当我编辑它并点击保存时,没有任何反应,甚至没有错误或警告.

有没有人有幸在Windows上运行Guard或遇到类似的问题?

rspec ruby-on-rails guard rspec-rails

7
推荐指数
1
解决办法
2012
查看次数

运行rspec时隐藏文件列表?

rake spec在大型Rails项目的命令行上运行时,我会得到一个将运行的每个rspec文件的巨大列表.

有默认隐藏的方法吗?

ruby-1.9.3-p448/bin/ruby -S rspec ./spec/acceptance/replicators/activity_replicator_spec.rb ./spec/acceptance/replicators/template_replicator_spec.rb ./spec/authorization_rules/admin_authorization_rules_spec.rb ...
Run Code Online (Sandbox Code Playgroud)

当我只运行rspec(没有拨打电话)我没有得到这个控制台输出.


编辑1

根据phoet的回答,我试过了

RSpec::Core::RakeTask.new(:spec) do |t|
  t.verbose = false
  t.warning = false
  t.rcov = false
end

task :default => :spec
Run Code Online (Sandbox Code Playgroud)

这并没有解决问题.

rake configuration rspec2 rspec-rails ruby-on-rails-3

7
推荐指数
1
解决办法
979
查看次数

如何在Rails控制器动作的RSpec测试中指定查询字符串?

我有一个叫做的动作yearly_csv.在这个动作中,我执行两个操作,如需求和供应.

def yearly_csv
   if demand == 'true'
       demand_csv
   else
       supply_csv
   end
end
Run Code Online (Sandbox Code Playgroud)

我在视图中有两个单选按钮来选择其中一个操作.现在我想在RSpec中单独测试每个操作.例如,一个供应规格和另一个需求规格.我的问题是如何将单选按钮值传递给yearly_csv动作(get)?

ruby rspec ruby-on-rails capybara rspec-rails

7
推荐指数
2
解决办法
7025
查看次数

告诉 Rspec - 在运行测试之前不要删除我的 test_db

我填充了一个要对其运行 rspec 测试的数据库。

Rspec 似乎在开始测试之前删除了数据库。我如何告诉 Rspec 不要删除这个 test_db?

我在 Rails / Rspec 环境之外填充数据库。构建构建数据库所需的所有工厂对于项目范围来说是不切实际的,但我想针对现有数据库进行测试。

rspec ruby-on-rails rspec-rails

7
推荐指数
1
解决办法
3955
查看次数

如何运行多个特定的RSpec测试?

我有一个巨大的测试套件(> 5000次测试)需要一个小时才能运行.400失败了,我有一个失败的测试列表,如下所示:

rspec ./spec/models/fullscreen_hidden_view_state_spec.rb:116 # FullscreenHiddenViewState showing a playlist on third element - slide has all the right links and properties
rspec ./spec/features/fullscreen/play_spec.rb:59 # View case in fullscreen presention mode Courtesy section when viewing the cases discussion via the cases hidden share token the Add To button should be hidden
rspec ./spec/features/cases/index_spec.rb:204 # finding a case Filtering by study modality Filtering by modality only shows cases with modality
rspec ./spec/models/playlist_spec.rb[1:2:2:2:1] # Playlist it should behave like an entity with privacy …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails rspec-rails

7
推荐指数
2
解决办法
2712
查看次数