2015-02-12 5 views
14

Я создал новое приложение rails и следую инструкциям по установке для rspec-rails здесь - https://github.com/rspec/rspec-rails Затем я создал (скопировал из interwebs) следующий модуль в моем каталоге app/lib.uninitialized constant Rspec

require 'openssl' 
require 'base64' 

module Cipher 
    def self.encrypt(key, data) 
    data += 'A' # Add 'A' suffix to support empty data 
    cipher(:encrypt, key, data) 
    end 

    def self.decrypt(key, text) 
    data = cipher(:decrypt, key, text) 
    data[0...-1] # Remove the 'A' suffix 
    end 

    def self.encrypt_base64(key, data) 
    blowfish_string = self.encrypt(key, data) 
    Base64.encode64(blowfish_string) 
    end 

    def self.decrypt_base64(key, base64_string) 
    blowfish_string = Base64.decode64(base64_string) 
    self.decrypt(key, blowfish_string) 
    end 

    private 

    def self.cipher(mode, key, data) 
    cipher = OpenSSL::Cipher::Cipher.new('bf-cbc').send(mode) 
    cipher.key = Digest::SHA256.digest(key) 
    cipher.update(data) << cipher.final 
    end 
end 

Затем я создал следующий файл спецификации.

require 'rails_helper' 

Rspec.describe Ciper do 

    describe "cipher encrypts data" do 
    let(:key) { 'secret key' } 

    it "encrypts a string" do 
     original = '' 
     encrypted = Cipher.encrypt(key, original) 
     decrypted = Cipher.decrypt(key, encrypted) 
     expect(decrypted).to equal original 
    end 
    end 

end 

Когда я пытаюсь запустить спецификации я получаю следующую ошибку

/Users/user/RubymineProjects/skeleton/spec/lib/cipher_spec.rb:3:in `<top (required)>': uninitialized constant Rspec (NameError) 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/configuration.rb:1226:in `load' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/configuration.rb:1226:in `block in load_spec_files' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/configuration.rb:1224:in `each' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/configuration.rb:1224:in `load_spec_files' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/runner.rb:97:in `setup' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/runner.rb:85:in `run' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/runner.rb:70:in `run' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/lib/rspec/core/runner.rb:38:in `invoke' 
    from /Users/user/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.2.0/exe/rspec:4:in `<top (required)>' 
    from /Users/user/.rvm/gems/ruby-2.2.0/bin/rspec:23:in `load' 
    from /Users/user/.rvm/gems/ruby-2.2.0/bin/rspec:23:in `<top (required)>' 
    from -e:1:in `load' 
    from -e:1:in `<main>' 

Process finished with exit code 1 
Empty test suite. 

Я не уверен, что я делаю неправильно здесь. Может ли кто-нибудь дать представление о том, что я могу попробовать? Благодаря!

ответ

36

От ошибки:

uninitialized constant Rspec (NameError) 

В вашем Cipher спецификации, вы неправильно RSpec в Rspec. Идентификаторы Ruby чувствительны к регистру, и вы не определили Rspec, следовательно, ошибка.

+3

О, чувак, я не могу поверить, что пропустил это. Благодаря! –

+0

@geoffswartz - все в порядке ... просто * ТОЧНО * то же самое;) – Nick

Смежные вопросы