我有Spork测试服务器的问题.
如果我在config/environments/test.rb中设置config.cache_classes = false,那么规范就会开始出现rasie错误.
Failure/Error: task = Factory(:something, :foo => @foo, :bar => @bar)
DataMapper::ImmutableError:
Immutable resource cannot be modified
Run Code Online (Sandbox Code Playgroud)
这是我的spec_helper.rb:
require 'spork'
Spork.prefork do
if ENV['CODE_COVERAGE'] == '1'
require 'simplecov'
SimpleCov.start 'rails'
end
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'webmock/rspec'
require 'factory_girl'
Dir[Rails.root.join("spec/controllers/shared/*.rb")].each { |f| require f }
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
RSpec.configure do |config|
config.mock_with :mocha
config.include Rails.application.routes.url_helpers
config.include UrlHelper
config.before(:each) do
repository(:default) do
transaction = DataMapper::Transaction.new(repository)
transaction.begin
repository.adapter.push_transaction(transaction)
end
end
config.after(:each) do …Run Code Online (Sandbox Code Playgroud) 当我使用spork运行我的rspec测试时,每次使用capybara的save_and_open_page时,spork都会丢失测试套件..或者可能不再输出任何东西......
查看日志
# => without save_and_open_page
09:04:24 - INFO - Spork server for RSpec, Test::Unit successfully started
09:04:24 - INFO - Guard::RSpec is running
09:04:24 - INFO - Running all specs
Running tests with args ["--drb", "-f", "progress", "-r", "/Users/myuser/.rvm/gems/ruby-1.9.3-p392/gems/guard-rspec-2.5.2/lib/guard/rspec/formatter.rb", "-f", "Guard::RSpec::Formatter", "--failure-exit-code", "2", "spec"]...
................
Finished in 4.1 seconds
16 examples, 0 failures
Randomized with seed 50331
Done.
# => with save_and_open_page, no .... are shown anymore
09:04:29 - INFO - Guard is now watching at '/Users/myuser/coding/myproject'
09:04:39 - …Run Code Online (Sandbox Code Playgroud) 自动测试通过仅运行更改的测试来提高测试运行的速度.
但我想通过使用spork预加载Rails环境来进一步推动它,这样我将获得更快的反馈.
这可能吗?
自动测试:https://github.com/grosser/autotest
Spork:http://github.com/timcharper/spork
我正在使用以下宝石和ruby-1.9.3-p194:
轨道3.2.3
rspec-rails 2.9.0
spork 1.0.0rc2
警卫队0.6.1
此Gemfile.lock或Gemfile中提供了已使用gems的完整列表.
我正在使用此配置文件:
如果我修改任何模型(或app/validators等等中的自定义验证器)重新加载代码不起作用.
我的意思是当我运行规格(在防守控制台上按Enter键)Spork包含"旧代码",我得到过时的错误消息.但是当我手动重启Guard和Spork(CTRC-C CTRL-d后卫)时,一切正常.但几次后它已经累了.
问题:
有人可以看看我的配置文件并修复阻止更新代码的错误.
或者这可能是最新Rails版本的问题?
PS这个问题在一些项目中重复并重复(在某些项目上).但我还没弄清楚为什么会发生这种情况.
PS2也许这个问题与此有关ActiveAdmin?当我在app/admin代码中更改文件时重新加载.
我在运行所有规格时遇到问题.
ActiveRecord::AssociationTypeMismatch:
Affiliate(#2154746360) expected, got Affiliate(#2199508660)
我的模型似乎被加载了两次.
我已经将Rack :: Test要求定义"app"方法的问题隔离开了.
require 'rack/test'
include Rack::Test::Methods
# app method is needed for rack-test
def app
Rails.application
end
Run Code Online (Sandbox Code Playgroud)
如果我注释掉Rails.application我的机架规格不起作用,但我的所有其他规格都可以正常工作.使用的Rails.application,在"应用程序"的方法引入了上述错误.
如果我单独运行我的规格,一切正常.我正在使用Spork预加载我的环境,我认为模型首先由Spork加载,然后Rails.application在我的"app"方法中调用它们时重新定义.
关于如何解决这个问题的任何想法?我不确定是否有另一种方法可以在"app"方法中设置我的Rails应用程序.
Rake任务遇到与运行测试相同的问题:Rails启动过程在任务运行之前需要很长时间.
有没有办法将spork和rake整合在一起?
我有一个使用rails 3.2.3和spork 1.0.0rc2的应用程序.当我进行黄瓜测试时,我得到:
ActionView::Template::Error: undefined local variable or method `page_title'
Run Code Online (Sandbox Code Playgroud)
在我的应用程序助手中定义了page_title.在最后一次捆绑更新之前,我不确定是什么打破了它们.
谁有同样的问题?
我已经按照本教程关于使用spork加速rspec,而且我使用的是带有ruby 1.9.2和rails 3.2.5的win7 x64盒子.一切正常,但测试仍然执行缓慢.spork是否因为操作系统不支持分叉而在Windows上做不了多少?
我还能做些什么来加快速度吗?
我也发现了类似的问题,并观看了Corey Haines关于快速测试的视频.我很喜欢这个视频,但是当我们的工具状态(由于rails启动时间导致测试速度慢,在这种情况下)决定了我们如何构建代码时,我不禁感到某些东西已经关闭.如果那个缓慢的启动时间不存在,他的方法是否需要?另一方面,测试需要10-30秒才能运行,因此TDD的许多好处都会丢失,我也会看到他的观点.
如果它是相关的,这里是spork的控制台输出,因为rspec被执行了几次:
$ bundle exec spork
Using RSpec
-- Starting to fill pool...
Wait until at least one slave is provided before running tests...
** CTRL+BREAK to stop Spork and kill all ruby slave processes **
Spork is ready and listening on 8989!
-- Rinda Ring Server listening for connections...
-- build slave 1...
Preloading Rails environment
-- build slave 2...
Preloading Rails environment
Loading Spork.prefork …Run Code Online (Sandbox Code Playgroud) 我正在研究ruby.railstutorial.org/ruby-on-rails-tutorial-book.我使用rails 3.2.7,spork,rspec,capybara,launchy和一些警卫:)
我在第3章中有一个非常奇怪的问题:测试:
似乎测试不适用于<head>-Tag中的内容.如果我将<title>-tag放在<body>-tag而不是head-tag中,它可以正常工作.当我把<h1>-tags放在<title>里面 - <head>标签时,它也有效.这很奇怪,不是吗?
请帮帮我搞清楚.
示例来自:ruby.railstutorial.org/chapters/static-pages#code:title_test:
it "should have the right title" do
visit '/static_pages/home'
page.should have_selector('title',
:text => "Ruby on Rails Tutorial Sample App | Home")
end
Run Code Online (Sandbox Code Playgroud)
错误消息是:
失败:
1)静态页面主页应该有标题'Home'失败/错误:page.should have_selector('title',:text =>'| Home')Capybara :: ExpectationNotMet:期望找到带有文本的css"title" |主页"但没有比赛.还找到"",它匹配选择器但不是所有过滤器.#./spec/requests/static_pages_spec.rb:15:在'块(3级)中'
那个工作:
it "should have the h1 'Sample App'" do
visit '/static_pages/home'
page.should have_selector('h1', :text => 'Sample App')
end
Run Code Online (Sandbox Code Playgroud)
呈现的HTML文件:
<!DOCTYPE html>
<html>
<head>
<title>Ruby on Rails Tutorial Sample App | …Run Code Online (Sandbox Code Playgroud) spork ×10
rspec ×5
capybara ×2
guard ×2
ruby ×2
testing ×2
autotest ×1
cucumber ×1
datamapper ×1
factory-bot ×1
rake ×1
rspec-rails ×1
rubygems ×1