我正在使用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)
任何的想法?
看起来我的助手(有时是我的模特)在每次使用Spork时都没有重新加载.我应该把什么放进我的"Spork.each_run"区块?
我以正常的方式创建了一个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) 我有与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) 我遇到了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) 我已经安装了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或遇到类似的问题?
当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)
这并没有解决问题.
我有一个叫做的动作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)?
我填充了一个要对其运行 rspec 测试的数据库。
Rspec 似乎在开始测试之前删除了数据库。我如何告诉 Rspec 不要删除这个 test_db?
我在 Rails / 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)