我正在使用rspec和黄瓜进行BBD.现在我正在迁移到rails 3和rspec 2,因为我可以看到两个框架(shoulda和非凡)支持rails 3和rspec 2.
我从来没有用过过的或非凡过的.
我已将我的应用程序从使用升级config.gem到Gemfile捆绑包,并注意到我的单元测试现已停止运行.这有点奇怪,我不完全确定从哪里开始寻找.
当我运行时,rake test:units --trace我可以看到我的环境正在设置,它列出了它打算执行的文件,但它只是返回.
如果我尝试使用以下内容运行一个单独的文件,它会做同样的事情:rake -I"lib:test" test/unit/foo.rb或者使用autotest.
这一切都很奇怪.好像文件正在加载但实际的单元测试没有运行.
我正在使用shoulda并且fast_context我认为这可能是问题但是如果我使用标准def test_语法包含单元测试它仍然没有运行所以我不认为它是那些.
任何提示或指示将不胜感激.我觉得我编码是盲目的,直到我能让他们再次工作!
所以这就是我现在的位置:
我使用bundler的原因是为了在heroku上安装依赖项,因为我想在github上使用源自git repo的gem.它的长期和短缺是我已经删除了preinitializerfor bundler并重新使用config.gem.为了解决这个事实我不能使用github repo使用config.gem我已经将我自己的副本推出到rubygems.这是正确的举动吗?
这是preinitializer.rb
begin
require "rubygems"
require "bundler"
rescue LoadError
raise "Could not load the bundler gem. Install it with `gem install bundler`."
end
if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("0.9.24")
raise RuntimeError, "Your bundler version is too old for Rails 2.3." +
"Run `gem install bundler` …Run Code Online (Sandbox Code Playgroud) 当我想测试RSpec 是否无法访问属性时我就是这样做的
class Foo
attr_accesible :something_else
end
describe Foo do
it('author should not be accessible') {lambda{described_class.new(:author=>true)}.should raise_error ActiveModel::MassAssignmentSecurity::Error}
it('something_else should be accessible'){lambda{described_class.new(:something_else=>true)}.should_not raise_error ActiveModel::MassAssignmentSecurity::Error}
end
Run Code Online (Sandbox Code Playgroud)
这样做有更好的方法吗?
...谢谢
我'shoulda-matchers'在我的rails项目中的Gemfile中从版本1.4.2更新到2.0.0,现在当我运行我的rspec测试时,它给了我以下错误
undefined method `assign_to' for #<RSpec::Core::ExampleGroup::Nested_4::Nested_1::Nested_4::Nested_1:0x007fc96eaaaf48>
Run Code Online (Sandbox Code Playgroud)
是否在新的2.0.0版本中删除了此方法?
我已经设置了Rspec2 beta5,并且如下所示在rspec模型测试中使用了shoulda宏.
=================更新2011年2月18日
现在我们可以使用开箱即用的应用匹配器.
只需gem shoulda-matchers在spec_helper或任何hack中添加Gemfile和其他内容.它只是运行.
的Gemfile
group :test do
gem "rspec", ">= 2.0.0.beta.4"
gem "rspec-rails", ">= 2.0.0.beta.4"
gem 'shoulda', :git => 'git://github.com/bmaddy/
shoulda.git'
gem "faker"
gem "machinist"
gem "pickle", :git => 'git://github.com/codegram/
pickle.git'
gem 'capybara', :git => 'git://github.com/jnicklas/
capybara.git'
gem 'database_cleaner', :git => 'git://github.com/bmabey/
database_cleaner.git'
gem 'cucumber-rails', :git => 'git://github.com/aslakhellesoy/
cucumber-rails.git'
end
Run Code Online (Sandbox Code Playgroud)
spec_helper.rb
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
require 'shoulda'
Rspec.configure do |config|
Run Code Online (Sandbox Code Playgroud)
规格/型号/ outlet_spec.rb
require 'spec_helper'
describe Outlet do
it { should validate_presence_of(:name) }
end …Run Code Online (Sandbox Code Playgroud) 我试图让整个设置与Mac上的Autotest/Growl/Shoulda一起测试我正在为Authlogic工作的宝石.我过去曾经使用过RSpec,但是想切换到Shoulda.
这个gem将与Rails一起使用,但是我制作的其他宝石只是普通的旧ruby库,不依赖于Rails模块.测试rubygems的推荐方法是什么?
ZenTest似乎主要集中在Rails上,因为我还没有找到一个宝石,因此autotest无论我是使用Rails,Sinatra还是制作宝石,我都可以自动调用所有TestUnit测试.
问题是,您正在构建的宝石运行测试的设置/工作流程是什么?你有什么资源可以帮助我吗?
或者更具体,可测试的问题:如何使用自动测试运行Paperclip或Authlogic的测试套件?
到目前为止,我一直在使用这些作为资源:
非常感谢.想要将测试作为我工作流程的核心部分.
我正在尝试将我的rails应用程序升级到Rails3.
当我运行功能测试时,我会遇到很多NameError: uninitialized constant Test::Unit::AssertionFailedError错误.但是单元测试和网站本身似乎运行良好.
跟踪看起来像这样:
NameError: uninitialized constant Test::Unit::AssertionFailedError
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:in `const_missing_from_s3_library'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb:52:in `rescue in redirects_to_url?'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb:48:in `redirects_to_url?'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/action_controller/matchers/redirect_to_matcher.rb:35:in `matches?'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/assertions.rb:53:in `assert_accepts'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/context.rb:324:in `block in should'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/context.rb:382:in `call'
/Users/mantas/.rvm/gems/ruby-1.9.2-p0/bundler/gems/shoulda-02520e4/lib/shoulda/context.rb:382:in `block in create_test_from_should_hash'
Run Code Online (Sandbox Code Playgroud)
Shoulda和Amazon S3宝石都是最新版本.
我有什么想法我做错了吗?
在我的 Rails 应用程序中,我大量使用模型目录的子目录,因此使用命名空间模型 - 也就是说,我有以下目录层次结构:
models
|
+- base_game
| |
| +- foo.rb (defines class BaseGame::Foo)
|
+- expansion
|
+- bar.rb (defines class Expansion::Bar)
Run Code Online (Sandbox Code Playgroud)
这是由 Rails 强制执行的 - 也就是说,将类称为“只是”Foo和Bar.
我想对这些类进行单元测试(在 ActiveSupport::TestCase 之上使用 Shoulda)。我知道被测类的名称将派生自测试用例类的名称。
我如何编写单元测试来测试这些类?
我正在使用 Rails 4 和 Mongoid 4 开发一个项目。我正在尝试设置 Shoulda- matchers(版本 2.8.0),遵循thoughtbot/should-matchers,它指向另一个名为README for 2.8.0 的自述文件。我希望使用mongoid-rspec进行测试。
但是我不断得到spec_helper.rb:94:in '<top (required)>': uninitialized constant Shoulda (NameError)
我在Gemfile以下内容中添加了这个:跟随thoughtbot/shouda-matchers
group :test do
gem 'shoulda-matchers'
end
Run Code Online (Sandbox Code Playgroud)
我还添加了spec_helper.rb(这是错误的来源)-关注thoughtbot/should-matchers
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
Run Code Online (Sandbox Code Playgroud)
我试过谷歌搜索,但没有直接的解决方案(或者没有直接的问题)。我require: false在 Gemfile 中添加,遵循2.8.0 的自述文件
group :test do
gem 'shoulda-matchers', require: false
end
Run Code Online (Sandbox Code Playgroud)
我require 'shoulda/matchers'在rails_helper.rb. 我的“要求”顺序是这样的:
require 'spec_helper' …Run Code Online (Sandbox Code Playgroud) 我正在努力成为一名优秀的 Rails 开发人员并编写测试。我遇到了一些不清楚的事情,正在寻求建议。我有一个具有独特的不区分大小写属性的模型。然而测试失败了。测试这个的正确方法是什么?我究竟做错了什么?
class Tenant < ApplicationRecord
validates :name, presence: true
validates :name, uniqueness: { case_sensitive: false }
end
RSpec.describe Tenant, type: :model do
it { should validate_presence_of :name }
it { should validate_uniqueness_of(:name).case_insensitive }
end
Run Code Online (Sandbox Code Playgroud)
看起来它正在尝试设置 id,nil即使我们有另一个需要存在的验证。但为什么在测试名称时要这样做呢?我很困惑。
测试显示以下结果;
Failures:
1) Tenant Validates Uniqueness of should validate that :name is case-insensitively unique
Failure/Error: self.id = self.id.downcase
NoMethodError:
undefined method `downcase' for nil:NilClass
# ./app/models/tenant.rb:17:in `block in <class:Tenant>'
# /Users/a/.rvm/gems/ruby-2.5.0/gems/shoulda-matchers-3.1.2/lib/shoulda/matchers/active_model/validator.rb:96:in `perform_validation'
# /Users/a/.rvm/gems/ruby-2.5.0/gems/shoulda-matchers-3.1.2/lib/shoulda/matchers/active_model/validator.rb:89:in `validation_result'
# /Users/a/.rvm/gems/ruby-2.5.0/gems/shoulda-matchers-3.1.2/lib/shoulda/matchers/active_model/validator.rb:85:in `validation_error_messages'
# /Users/a/.rvm/gems/ruby-2.5.0/gems/shoulda-matchers-3.1.2/lib/shoulda/matchers/active_model/validator.rb:64:in …Run Code Online (Sandbox Code Playgroud)