我倾向于在块之前使用来设置实例变量.然后,我在我的示例中使用这些变量.我最近遇到了let().根据RSpec文档,它习惯了
...定义一个memoized帮助方法.该值将在同一示例中的多个调用之间缓存,但不跨示例缓存.
这与在块之前使用实例变量有什么不同?还有什么时候你应该使用let()vs before()?
我有以下文件:
/spec/controllers/groups_controller_spec.rb
Run Code Online (Sandbox Code Playgroud)
在终端中使用什么命令来运行该规范以及在哪个目录中运行命令?
我的宝石文件:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
Run Code Online (Sandbox Code Playgroud)
规格文件:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
Run Code Online (Sandbox Code Playgroud) 我希望能够运行单个spec文件的测试 - 例如,我正在编辑的一个文件. rake spec执行所有规格.我的项目不是Rails项目,所以rake spec:doc不起作用.
不知道这是否重要,但这是我的目录结构.
./Rakefile ./lib ./lib/cushion.rb ./lib/cushion ./lib/cushion/doc.rb ./lib/cushion/db.rb ./spec ./spec/spec.opts ./spec/spec_helper.rb ./spec/db_spec.rb
我经常想要比较数组并确保它们以任何顺序包含相同的元素.在RSpec中有一个简洁的方法吗?
以下是不可接受的方法:
#to_set例如:
expect(array.to_set).to eq another_array.to_set
Run Code Online (Sandbox Code Playgroud)
要么
array.to_set.should == another_array.to_set
Run Code Online (Sandbox Code Playgroud)
当数组包含重复项时,这会失败.
#sort例如:
expect(array.sort).to eq another_array.sort
Run Code Online (Sandbox Code Playgroud)
要么
array.sort.should == another_array.sort
Run Code Online (Sandbox Code Playgroud)
当数组元素未实现时,这会失败 #<=>
在iPhone上用于行为驱动开发的最佳技术是什么?什么是一些开源示例项目,证明了这些技术的合理使用?以下是我发现的一些选项:
UI自动化(适用于设备)
可以使用Cucumber(用JavaScript编写)来驱动UI自动化.这将是一个伟大的开源项目.然后,我们可以编写Gherkin来运行UI自动化测试.现在,我只会写Gherkin作为评论.
更新:Zucchini框架似乎融合了Cucumber和UI Automation!:)
旧博客帖子:
弗兰克和iCuke(基于黄瓜会见iPhone谈话)
我想做这样的事情:
some_method.should_raise <any kind of exception, I don't care>
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
some_method.should_raise exception
Run Code Online (Sandbox Code Playgroud)
......不起作用.
我现在谷歌搜索大约90分钟仍然没有得到答案.我在哪里设置default_url_options?我已经将其设置为config.action_mailer.default_url_options在其他地方解决此相同的错误,但现在我在尝试在RSpec规范中使用URL帮助程序时遇到此错误.我不知道它在哪里设置default_url_options.
Failure/Error: listing_url(listing).should match(/\/\d+-\w+$/)
RuntimeError:
Missing host to link to! Please provide :host parameter or set default_url_options[:host]
# ./spec/routing/listing_routing_spec.rb:9:in `block (3 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
这段代码与emails/ActionMailer无关,它恰好需要一个URL而不是一个路径.
有任何想法吗?
在rspec中测试模块的最佳实践是什么?我有一些模块包含在少数模型中,现在我只是对每个模型进行了重复测试(差异很小).有没有办法让它干涸?
如何在Ubuntu中为RSpec设置全局配置.
具体来说, - color和--format specdoc在我的所有项目中保持打开状态(即每次我在任何地方运行rspec).
使用添加的rspec-rails生成器来设置RSpec以测试Rails应用程序非常容易.但是如何添加RSpec来测试开发中的宝石?我不是在使用珠宝商或这样的工具.我只是使用Bundler(bundle gem my_gem)来设置新gem的结构并手动编辑*.gemspec.我还加入s.add_development_dependency "rspec", ">= 2.0.0"了gemspec并做了一个bundle install.
是否有一些很好的教程,接下来要做什么让RSpec工作?