Tag: 测试

Rails:使用RSpec测试命名范围

我是测试Rails Web应用程序和RSpec的新手。 我使用遗留代码并需要添加测试。 那么使用RSpec测试查找器和命名范围的最佳方法是什么? 我在Google中找到了一些方法,但它们并不理想。 例如: http://paulsturgess.co.uk/articles/show/93-using-rspec-to-test-a-named_scope-in​​-ruby-on-rails it “excludes users that are not active” do @user = Factory(:user, :active => false) User.active.should_not include(@user) end 要么 http://h1labs.com/notebook/2008/8/21/testing-named-scope-with-rspec it “should have a published named scope that returns …” do Post.published.proxy_options.should == {:conditions => {:published => true}} end 我在“铁路测试处方”中找到最佳方法(恕我直言): should_match_find_method :active_only { :active == true } 其中should_match_find_method自定义帮助方法

如何在Ruby中测试XML相等性?

显然,我需要(a)将两个字符串转换为规范XML或(b)比较它们的解析树。 以下不起作用,因为返回的文档对象没有合理的==定义。 Nokogiri.XML(doc_a) == Nokogiri.XML(doc_b) 下面也没有,因为Nokogiri的to_xml留下了一些内部空白: Nokogiri.XML(doc_a).to_xml == Nokogiri.XML(doc_b).to_xml 这是一个合理的近似平等(并且适用于大多数情况),但它并不完全正确: Nokogiri.XML(doc_a).to_xml.squeeze(‘ ‘) == Nokogiri.XML(doc_b).to_xml.squeeze(‘ ‘) 我已经在使用Nokogiri了,所以我更愿意坚持下去,但我会使用任何图书馆的作品。

如何测试Rails ERB模板的代码覆盖率?

我只是为传统的Rails应用程序构建测试套件。 simplecov gem非常适合找到需要测试覆盖的应用程序的黑暗角落(或者可能完全未使用且可以删除)。 我只是通过在test/test_helper.rb的顶部包含以下内容来调用test/test_helper.rb : require ‘simplecov’ SimpleCov.start(‘rails’) 问题是,这不会检查嵌入在模板中的所有代码。 那里有各种各样的垃圾,我确信它可以被删除很多,但如果代码覆盖工具可以指向未使用的位,那将是非常好的。 使用Ruby 1.9的Coverage库进行的一些实验让我相信,只有模板以某种方式预编译为Ruby代码,保存在Ruby源文件中,然后load ed或者require d,而不是加载使用eval直接编译模板。 或者,可能会破坏ERB在编译过程中向每个模板的每一行添加日志记录语句。 有没有人有任何其他想法如何衡量ERB模板的代码覆盖率? 你知道一个可以做到这一点的已经制造的工具吗? (或者我必须成为构建和发布它的人吗?)

反对在RSpec测试中使用之前,之后和主题的论点是什么?

我刚刚开始编写RSpec测试,我遇到了thinkbot的Style Guide ,它建议不要let , let! , before和subject (以及其他)。 我也在其他几个地方读过类似的建议(包括旧的RSpec文档警告before(:all) ),但我似乎无法找到反对它们的实际论点。 所以问题是: 为什么我不应该在测试中使用这些方法? 什么是更好的方法?

Rails:良好的Rspec2示例用法? (另外:Cucumber,Pickle,Capybara)

我正在寻找一个使用Rspec 2作为测试库的最新开源应用程序。 我想看看有经验的开发人员如何正确地利用库来测试完整的堆栈,因为我对自己的知识一直存在疑问(来自testunit,部分原因是由于最新Rspec版本的相当稀疏的文档,甚至虽然它不断改进)。 如果一个项目使用Cucumber,Pickle和/或Capybara以及Rspec 2,你会让我高兴得跳起来。 有什么指针吗? 干杯!

RSpec允许/期望vs期望/和_return

在RSpec中,特别是版本> = 3,之间有什么区别: 使用allow来设置返回测试双精度的参数的消息期望,然后使用expect对返回的测试双精度进行断言 只需使用expect来设置参数的期望并返回测试double 或者只是语义学? 我知道提供/指定带有expect的返回值是RSpec模拟2.13中的语法 ,但据我所知,RSpec模拟3中的语法改变为使用allow 。 但是,在下面的(传递)示例代码中,使用allow / expect或者只是expect / and_return似乎会生成相同的结果。 如果一种语法比另一种更受欢迎,也许我会期望有某种弃用通知,但由于没有,似乎两种语法都被认为是有效的: class Foo def self.bar(baz) # not important what happens to baz parameter # only important that it is passed in new end def qux # perform some action end end class SomethingThatCallsFoo def some_long_process(baz) # do some processing Foo.bar(baz).qux # […]

尝试运行测试时获取未初始化的常量错误

我刚刚更新了所有的gem,我发现在尝试运行Test :: Unit测试时我遇到了错误。 我收到下面复制的错误。 这来自于创建新的空Rails项目,搭建一个简单的模型,以及运行rake test 。 尝试谷歌搜索“未初始化的常量”和TestResultFailureSupport。 我发现的唯一一件事是2007年的这个错误报告 。 我正在使用OS X. 这些是我在测试停止工作之前更新的gem: $ sudo gem outdated Password: RedCloth (4.2.1 < 4.2.2) RubyInline (3.8.1 < 3.8.2) ZenTest (4.1.1 < 4.1.3) bluecloth (2.0.4 < 2.0.5) capistrano (2.5.5 < 2.5.8) haml (2.0.9 < 2.2.1) hoe (2.2.0 < 2.3.2) json (1.1.6 < 1.1.7) mocha (0.9.5 < 0.9.7) rest-client […]

在Ruby中测试STDIN

我目前正在尝试测试一个基本方法,它接收来自用户的一些输入(获取)并输出它(puts)。 经过一番研究后,我找到了测试标准输出流的好方法,如下所示: def capture_standard_output(&block) original_stream = $stdout $stdout = mock = StringIO.new yield mock.string.chomp ensure $stdout = original_stream end 我正在测试的方法是下面的一个,输出和输入是指我在开头初始化并指向等效的$ stdout&$ stdin的ivars: def ask_for_mark ouput.puts ‘What shall I call you today?’ answer = input.gets.chomp.capitalize answer end 现在我已经看到了STDIN的一些解决方案,但还没有真正了解它们中的任何一个,我绝对不想复制和粘贴。 我唯一能够“工作”的是下面的那个,但它并没有真正起作用,因为当我运行rspec它暂停并等待输入时,只需按Enter键,它就会通过: it “takes user’s name and returns it” do output = capture_standard_output { game.ask_for_name } expect(output).to eq “What […]

我如何对我的默认范围进行rspec测试

我的模型有default_scope(:order =>’created_at’)我的测试(rspec,factory girl,shoulda等)是: require ‘spec/spec_helper.rb’ describe CatMembership do context “is valid” do subject { Factory.build(:cat_membership) } it { should be_valid } it { should belong_to :cat} it { should belong_to :cat_group} it { should have_db_column(:start_date)} it { should have_db_column(:end_date)} end end

Rails夹具未加载rspec

所以,我正在尝试在rails项目的上下文中学习rspec BDD测试框架。 我遇到的问题是,在我的生活中,我无法在rspec描述中正确加载我的灯具。 免责声明:是的,有比使用固定装置更好的东西。 我正在尝试一次学习一件事,这里(特别是rspec)在我玩相关工具之前,比如工厂女孩,摩卡,自动测试等。因此,我试图让死者变得简单,如果笨重,固定装置工作。 无论如何,这是代码: /test/fixtures/users.yml – # password: “secret” foo: username: foo email: foo@example.com password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f password_salt: bef65e058905c379436d80d1a32e7374b139e7b0 bar: username: bar email: bar@example.com password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f password_salt: bef65e058905c379436d80d1a32e7374b139e7b0 /spec/controllers/pages_controller_spec.rb – require ‘spec/spec_helper’ describe PagesController do integrate_views fixtures :users it “should render index template on index call when logged in” do session[:user_id] = user(:foo).id get […]