在运行'rspec spec'时,期望在其他规格之外可见的规范()

时间:2013-07-11 20:33:33

标签: ruby rspec rspec2 rspec-rails

我有两个规格,当单独运行时,执行正常,但当我使用&#rs; rspec spec'执行它们时后者失败了。

首先:

    describe "DB Archival" do
      it "should archive the nodes which are deleted" do
        node_data_archival = mock()
        NodeDataArchival.expects(:new).with('node1').returns(node_data_archival)
        node_data_archival.expects(:export_to_csv).with([1,2])
        db_archival.archive_deleted_nodes
      end
    end

第二

describe "Export to CSV" do
  it "should export data to a csv file" do
    class School < ActiveRecord::Base
    end

    School.expects(:column_names).returns(["id", "name"])
    node_data_archival = NodeDataArchival.new("school")
    node_data_archival.export_to_csv(rows, filename)
   end
end

第二次抛出:

$ rspec spec
.......F......

Failures:

  1) Export to CSV should export data to a csv file
     Failure/Error: node_data_archival1 = NodeDataArchival.new("school")
     Mocha::ExpectationError:
       unexpected invocation: NodeDataArchival.new('school')
       unsatisfied expectations:
       - expected exactly once, not yet invoked: School(Table doesn't exist).column_names(any_parameters)
       satisfied expectations:
       - expected exactly once, invoked once: NodeDataArchival.new('node1')
       - expected exactly once, invoked once: #<RSpec::Mocks::Mock:0x7ff4693d3028>.export_to_csv([1, 2])
     # ./spec/entity_traversal/node_data_archival_spec.rb:16:in `block (2 levels) in <top (required)>'

我的问题是 - 1)为什么它试图找到期望而不是在第二个规范中创建NodeDataArchival的实际实例? 2)为什么第二个规范能够找到第一个规范声明的expected()?

PS:只有当我使用&rs; rspec spec&#39;一起运行所有规格时才会出现问题。两个规格都单独运行。

编辑: 使用的版本: 红宝石1.9.3-P125, rspec(2.13.0) 和摩卡(0.14.0)

编辑:使用rspec-rails-mocha(0.3.2)代替mocha(0.14.0)解决了这个问题。

1 个答案:

答案 0 :(得分:0)

基于评论主题,这似乎是您引用的ruby,rspec和mocha版本之间相当严重的不兼容性。没有这样的问题提交给mocha的github网站,更不用说包含在他们的“已知问题”文档中。

虽然mocha gem似乎已被rspec-rails-mocha gem用于rspec,但是你后来尝试过,你可能想提交一个针对mocha的问题。如果你想成为一个特别好的公民,你可以尝试使用ruby 2.0和rspec 2.14,然后再看看它们有什么影响。