我正在使用rails 2.3.5,我希望我们Rspec进行测试.我已经安装了rspec gem但是无法在生成器列表中列出rspec.我指的是https://github.com/rspec/rspec-rails.
group :development, :test do gem "rspec", "~> 1.3" gem "rspec-rails", "~> 1.3" end
谢谢.
rspec ruby-on-rails ruby-on-rails-plugins rspec-rails ruby-on-rails-2
我需要知道如何测试这个控制器动作
def create_mobile
if mobile_user = MobileUser.authenticate(params[:email], params[:password])
session[:mobile_user_id] = mobile_user.id
respond_to do |format|
format.json { head :ok }
end
else
respond_to do |format|
format.json { head :unauthorised }
end
end
end
Run Code Online (Sandbox Code Playgroud)
该路由是对sessions/create_mobile的发布请求,您可以看到该操作仅响应json
我当前的控制器规格看起来像这样
describe SessionsController, "Logging in" do
before(:each) do
@mobile_user = FactoryGirl.create(:valid_mobile_user)
end
it "Should log in mobile user" do
@request.env["HTTP_ACCEPT"] = "application/json"
post :create_mobile, {:password => @mobile_user.password, :email => @mobile_user.email}
response.should be_success
end
it "should fail log in mobile user" do
@request.env["HTTP_ACCEPT"] = "application/json"
post :create_mobile, {:password …Run Code Online (Sandbox Code Playgroud) 尝试调试一些在合并Rails两个项目时无法工作的规范.
我已经删除了我的Gemfile.lock并从头开始重新安装,我已经对特定的宝石进行了捆绑更新,而且整个很多但是当我尝试在我的请求规范中使用时出现错误
save_and_open_page
railsdev$ bin/rspec spec/requests/authentication_pages_spec.rb
No DRb server is running. Running in local process instead ...
/Users/rb/Repos/Genie/spec/requests/authentication_pages_spec.rb:33:in `block (3 levels) in <top (required)>': undefined local variable or method `save_and_open_page' for #<Class:0x007f981d139608> (NameError)
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:201:in `module_eval'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:201:in `subclass'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:187:in `describe'
from /Users/rb/Repos/Genie/spec/requests/authentication_pages_spec.rb:27:in `block (2 levels) in <top (required)>'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:201:in `module_eval'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:201:in `subclass'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:187:in `describe'
from /Users/rb/Repos/Genie/spec/requests/authentication_pages_spec.rb:24:in `block in <top (required)>'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:201:in `module_eval'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:201:in `subclass'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/example_group.rb:187:in `describe'
from /Users/rb/.rvm/gems/ruby-1.9.3-p125@genie/gems/rspec-core-2.10.1/lib/rspec/core/dsl.rb:18:in `describe'
from /Users/rb/Repos/Genie/spec/requests/authentication_pages_spec.rb:13:in `<top …Run Code Online (Sandbox Code Playgroud) 在阅读Michael Hartl撰写的Learn Rails书时,我对其中一个练习感到困惑. 通过Michael Hartl的例子学习Rails
"添加微博分页测试"
我的错误测试,放在登录用户"do"的'describe'中,如下所示:
describe "pagination" do
before(:all) do
30.times { FactoryGirl.create(:micropost, user: user) }
end
after(:all) { user.feed.delete_all }
page.should have_selector('div.pagination') }
it "should list each micropost" do
user.feed.paginate(page: 1).each do |user|
page.should have_selector('li', text: user.name)
end
end
end
Run Code Online (Sandbox Code Playgroud)
无论我是做page.should还是page.should_not,测试都会显示为pass.
任何'提示/帮助'将不胜感激
我正在尝试为rails 4应用程序完成一些测试,并且我一直遇到database_cleaner的问题.问题是数据库没有被清理,警告不断提高:
DEPRECATION WARNING: #increment_open_transactions is deprecated and has no effect. (called from block (3 levels) in <top (required)> at /Users/davidhahn/Dev/cta-projects/user-management2/spec/spec_helper.rb:49)
.DEPRECATION WARNING: #increment_open_transactions is deprecated and has no effect. (called from block (3 levels) in <top (required)> at /Users/davidhahn/Dev/cta-projects/user-management2/spec/spec_helper.rb:49)
WARNING: there is already a transaction in progress
WARNING: there is already a transaction in progress
.FFFFDEPRECATION WARNING: #increment_open_transactions is deprecated and has no effect. (called from block (3 levels) in <top (required)> at /Users/davidhahn/Dev/cta-projects/user-management2/spec/spec_helper.rb:49)
.DEPRECATION WARNING: #increment_open_transactions is deprecated …Run Code Online (Sandbox Code Playgroud) 在我的引擎'Utilizer'中,我试图用Rspec 3.2测试路线.命名空间是孤立的
# lib/utilizer/engine.rb
module Utilizer
class Engine < ::Rails::Engine
isolate_namespace Utilizer
...
end
end
Run Code Online (Sandbox Code Playgroud)
引擎安装到虚拟应用程序:
# spec/dummy/config/routes.rb
Rails.application.routes.draw do
mount Utilizer::Engine => "/utilizer", as: 'utilizer'
end
Run Code Online (Sandbox Code Playgroud)
对spec_helper.rb我添加了几个配置如下(从这里):
# spec/spec_helper.rb
RSpec.configure do |config|
...
config.before(:each, type: :routing) { @routes = Utilizer::Engine.routes }
...
end
Run Code Online (Sandbox Code Playgroud)
当我定义一条路线时:
# config/routes.rb
Utilizer::Engine.routes.draw do
resources :auths, id: /\d+/, only: [:destroy]
end
Run Code Online (Sandbox Code Playgroud)
Rake为虚拟应用程序正确显示:
$ spec/dummy > bundle exec rake routes
$ utilizer /utilizer Utilizer::Engine
$ Routes for Utilizer::Engine:
$ auth DELETE /auths/:id(.:format) utilizer/auths#destroy {:id=>/\d+/} …Run Code Online (Sandbox Code Playgroud) 运行我们的rspec测试套件时
bundle exec rspec spec/
Run Code Online (Sandbox Code Playgroud)
日志中包含很多日志语句.特别是,控制器规格多次显示这样的事情:
{"controller"=>"myController", "action"=>"create"}
Run Code Online (Sandbox Code Playgroud)
我想摆脱这些但找不到来源.没有与这样的匹配的puts语句,也没有任何Rails.logger调用.我假设这是一个日志级问题,但我可能是错的.在environment/test.rb中设置config.log_level无效.
当前的rspec配置如下所示
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
config.mock_with :rspec
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.orm = "mongoid"
end
config.before(:each) do
DatabaseCleaner.clean
end
config.color_enabled = true
config.tty = true
config.formatter = :documentation # :progress, :html, :textmate
end
Run Code Online (Sandbox Code Playgroud)
关于如何禁用这些类型的日志的任何想法?
旁注:Gemfile使用'rails','3.2.13'和'rspec-rails','2.14.0'
我想测试一个模块包含在一个类中.我正在尝试在RSpec中定义一个新类:
describe Statusable do
let(:test_class) do
class ModelIncludingStatusable < ActiveRecord::Base
include Statusable
statuses published: "????????????", draft: "????????"
end
end
describe '#statuses' do
it 'sets STATUSES for a model' do
test_class::STATUSES.should == ["????????????", "????????"]
end
end
end
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
TypeError:
[ActiveModel::Validations::InclusionValidator] is not a class/module
Run Code Online (Sandbox Code Playgroud)
这可能是因为Statusable我有:
validates_inclusion_of :status, :in => statuses,
:message => "{{value}} ?????? ???? ????? ??: #{statuses.join ','}"
Run Code Online (Sandbox Code Playgroud)
但如果我发表评论,我会得到:
TypeError:
["????????????", "????????"] is not a class/module
Run Code Online (Sandbox Code Playgroud)
也许新的类定义不是最好的选择,那我该怎么办?即使不是,我如何在RSpec中定义一个类?我该如何解决这个错误?
我需要验证页面特定部分中某些文本的存在。
expect(page).to 将会输出过多的文本,这对于包含协议条款的页面特别麻烦,因为协议条款一直很长。
我想转变expect(page).to(have_text(成类似expect('#id').to(have_text(...)
我无法弄清楚如何选择ID引用的页面部分。我应该expect(page)在里面写我within('#id')吗?
编辑:如果可能,针对嵌套标签的解决方案
<div id="id">
<span class="nested">...</span>
Text I want to check with have_text()
</div>`
Run Code Online (Sandbox Code Playgroud) 如何为活动记录范围编写测试?例如
class Post < ActiveRecord::Base
scope :recent, -> { order("posts.created_at DESC") }
scope :published, -> { where("status = 1") }
end
Run Code Online (Sandbox Code Playgroud)
我正在使用Rspec进行测试
RSpec.feature Post, :type => :model do
let(:post) { build(:post) }
describe 'test scopes' do
end
end
Run Code Online (Sandbox Code Playgroud) rspec-rails ×10
rspec ×6
capybara ×2
ruby ×2
json ×1
routing ×1
rspec2 ×1
rule-engine ×1
testing ×1