2013-07-11 1 views
0

У меня есть две спецификации, которые при индивидуальном запуске выполняются нормально, но когда я выполняю их с помощью «rspec spec», последний терпит неудачу.ожидает() спецификации, видимой снаружи других спецификаций при запуске «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) почему вторая спецификация может найти ожидаемые(), объявленные первой спецификацией?

PS: Проблема происходит только тогда, когда я запускаю все спецификации вместе с помощью «rspec spec», и оба спецификаций работают отлично.

РЕДАКТИРОВАТЬ: Версии, используемые: рубин-1.9.3-P125, RSpec (2.13.0) и мокко (0.14.0)

EDIT: Использование Rspec-рельсы-мокко (0.3.2) вместо мокко (0.14.0) решил проблему.

+0

Ожидания не должны «протекать», но можете ли вы поделиться своими полными спецификациями? Кроме того, являются ли они единственными двумя спецификациями в вашей спецификации/каталоге (т. Е. Являются ли эти два только спецификаций выполняемыми при выполнении 'rspec spec')? –

+0

@PeterAlfvin да, в основном только запуск этих двух спецификаций дает ошибку. Я упомянул оба здесь [link] http://pastebin.com/jZ50Fnd6. Кроме того, я разрешил его, используя should_receive в первой спецификации, выглядит как проблема с expects() – prat0318

+0

Вы объединили два файла и вставляете их как один? Я прошу, потому что там был только один 'require 'spec_helper''. –

ответ

0

Основываясь на комментариях, это выглядит довольно серьезной несовместимостью между версиями ruby, rspec и mocha, которые вы указали. Никакая такая проблема не была отправлена ​​на сайт github mocha, не говоря уже о включении в их документацию «Известные проблемы».

Несмотря на то, что мокко-драгоценный камень, по-видимому, неявно устарел для использования rspec с помощью rspec-rails-mocha gem, который вы впоследствии попробовали, вы можете отправить проблему против мокко. Если вы хотите быть особенно хорошим гражданином, вы можете попробовать Ruby 2.0 и rspec 2.14, прежде чем делать это, чтобы узнать, какое влияние они оказывают.