Kevin Hwang
Kevin Hwang

Reputation: 179

New to ruby and trying to fix the error from rspec

Hi I need to know how to do the following

rspec code:

2) WebServer::Htaccess#authorized? for valid-user with valid credentials returns true
 Failure/Error: expect(htaccess_valid_user.authorized?(encrypted_string)).to be_true
 ArgumentError:
   wrong number of arguments calling `authorized?` (1 for 0)
 # ./spec/lib/config/htaccess_spec.rb:82:in `(root)'
 # ./spec/lib/config/htaccess_spec.rb:44:in `stub_htpwd_file'
 # ./spec/lib/config/htaccess_spec.rb:41:in `stub_htpwd_file'
 # ./spec/lib/config/htaccess_spec.rb:40:in `stub_htpwd_file'
 # ./spec/lib/config/htaccess_spec.rb:81:in `(root)'

Here is the spec.rb file

let(:htaccess_valid_user) { WebServer::Htaccess.new(valid_user_content) }
let(:htaccess_user) { WebServer::Htaccess.new(user_content) }

describe '#authorized?' do
context 'for valid-user' do
  context 'with valid credentials' do
    it 'returns true' do
      stub_htpwd_file do
        expect(htaccess_valid_user.authorized?(encrypted_string)).to be_true
      end
    end
  end

  context 'with invalid credentials' do
    it 'returns false' do
      stub_htpwd_file do
        expect(htaccess_valid_user.authorized?(encrypted_string('bad user'))).not_to be_nil
        expect(htaccess_valid_user.authorized?(encrypted_string('bad user'))).to be_false
      end
    end
  end
end

I am new to ruby TDD, and all I have in my file right now is

def authorized? 



end

I am fluent in Node.js but this is completely new to me.

Please help.

Upvotes: 0

Views: 22

Answers (1)

Schwern
Schwern

Reputation: 164679

It's right there in the error message.

ArgumentError:
   wrong number of arguments calling `authorized?` (1 for 0)

You've passed arguments to the authorized? method.

expect(htaccess_valid_user.authorized?(encrypted_string)).to be_true
                                      ^^^^^^^^^^^^^^^^^^

But authorized? takes no arguments.

def authorized?
end

Unlike Javascript, Ruby will check you passed in the right number of arguments. If you specify no argument list, the default is to enforce taking no arguments. Add some.

def authorized?(authorization)
end

Upvotes: 2

Related Questions