2013-06-07 50 views
8

Tôi đang gặp phải tình huống có vẻ như xảy ra với nhiều người dùng Zeus và RSpec.Lỗi phát sinh Zeus khi chạy RSpec

Hãy nói rằng tôi có spec sau:

# spec/views/messages/show.html.erb 

require 'spec_helper' 

describe "messages/show.html.erb" do 
    it "displays the text attribute of the message" do 
    render 
    rendered.should contain("Hello world!") 
    end 
end 

và mẫu xem sau đó nó kiểm tra.

# app/views/messages/show.html.erb 

Hello world! 

Pwd của tôi là gốc của ứng dụng đường ray. Khi tôi chạy rspec Tôi nhận được phản hồi sau:

[email protected] $ rspec 
. 

Finished in 0.06264 seconds 
1 example, 0 failures 

Randomized with seed 9609 

Mọi thứ đều ổn. Tuy nhiên, nếu tôi chạy thử nghiệm với zeus rspec spec (zeus rspec không hoạt động chút nào), tôi nhận được kết quả sau.

[email protected] $ zeus rspec spec 
. 

Finished in 0.07292 seconds 
1 example, 0 failures 

Randomized with seed 0 

F 

Failures: 

    1) messages/show.html.erb displays the text attribute of the message 
    Failure/Error: render 
    NameError: 
     undefined local variable or method `render' for <RSpec::Core::ExampleGroup::Nested_2:0x936a0fc> 
    # ./spec/views/show.html.erb_spec.rb:5:in `block (2 levels) in <top (required)>' 
    # -e:1:in `<main>' 

Finished in 0.00041 seconds 
1 example, 1 failure 

Failed examples: 

rspec ./spec/views/show.html.erb_spec.rb:4 # messages/show.html.erb displays the text attribute of the message 

Tôi đã thấy một số câu hỏi tương tự như sau trên SO, như thế này:

Zeus fails when testing with Rspec

zeus rspec fails include required files, but rspec alone does fine

Zeus + FactoryGirl::Syntax::Methods. undefined method `create'

Điểm chung là các giải pháp đề nghị cho ý kiến ra/xóa các dòng sau từ spec_helper.rb nếu chúng tồn tại.

require 'rspec/autorun' 
require 'rspec/autotest' 

Vấn đề của tôi là những dòng đó không xuất hiện trong tệp spec_helper.rb của tôi hoặc bất kỳ nơi nào khác trong ứng dụng.

Sau một số lần tìm kiếm, tôi đã tìm thấy dòng vi phạm thực sự trong tập lệnh thực thi rspec trong đá quý RSpec.

Tôi hiện đang sử dụng phiên bản 2.13.1 RSpec và nội dung của tập tin như sau:

#!/usr/bin/env ruby 

begin 
    require 'rspec/autorun' 
rescue LoadError 
    $stderr.puts <<-EOS 
#{'*'*50} 
    Could not find 'rspec/autorun' 

    This may happen if you're using rubygems as your package manager, but it is not 
    being required through some mechanism before executing the rspec command. 

    You may need to do one of the following in your shell: 

    # for bash/zsh 
    export RUBYOPT=rubygems 

    # for csh, etc. 
    set RUBYOPT=rubygems 

    For background, please see http://gist.github.com/54177. 
#{'*'*50} 
    EOS 
    exit(1) 
end 

Nó xuất hiện từ các tài liệu RSpec rằng đó là một phương pháp tiện lợi mà sẽ chạy thử nghiệm cho bạn. Thật kỳ lạ, khi tôi nhận xét phần require 'rspec/autorun' của zeus bắt đầu/cứu hộ vẫn có hành vi tương tự (ném lỗi), nhưng rspec không còn hoạt động theo kiểu truyền thống (chỉ cần chạy lệnh rspec). Theo tài liệu này (https://www.relishapp.com/rspec/rspec-core/docs/command-line), bạn vẫn có thể chạy nó, chỉ trong thời trang dài hơn một chút.

Trong mọi trường hợp, điều này gợi ý cho tôi rằng zeus hoặc là dựa vào tệp khác với tập lệnh thực thi rspec hoặc vấn đề không liên quan rõ ràng đến chỉ các câu lệnh require_helper.rb yêu cầu (trong đó rspec 2.13. 1 không thêm vào cấu hình).

Có ai chạy vào tình huống này hoặc đi xuống cùng con đường này không ??

Tôi do dự để ném lên một vấn đề trên rspec-rails/rspec-core hoặc zeus repos vì tôi không chắc chắn thư viện nào đang gây ra vấn đề.

Bất kỳ trợ giúp nào đều sẽ được đánh giá rất cao.

+0

Tôi gặp sự cố tương tự, khi chạy một thông số trợ giúp cụ thể sẽ chỉ bị hỏng dưới zeus và chỉ khi chạy một tệp spec đó (không phải tất cả thông số trợ giúp). Lỗi là helper không thể tìm thấy một phương thức đã được định nghĩa trong ApplicationHelper. Cuối cùng tôi đã punted và thêm một yêu cầu 'application_helper' "vào đầu của spec trợ giúp, mà dường như đã cố định nó. Đã có vấn đề tương tự với spork cũng như zeus, vì vậy tôi không tin đó là zeus cụ thể. – sockmonk

Trả lời

1

Theo this bạn nên tuân thủ quy ước đặt tên tệp thông số kỹ thuật khi thực hiện các đặc điểm chế độ xem. Cố gắng đổi tên:

spec/views/messages/show.html.erb 

để

spec/views/messages/show.html.erb_spec.rb 

và nó có thể giúp đỡ.