以下是我试图用RSpec测试的控制器方法
def login
authorized_user = authenticate(params[:email], params[:password])
if authorized_user
# Creating a session if the User is Authorized
session[:user_email] = authorized_user
redirect_to(controller: 'home', action: 'details')
else
flash[:invalid] = 'Invalid Username or Password'
redirect_to(action: 'signin')
end
end
def authenticate(email = '', password = '')
url = 'http://localhost:8080/getUser/' + email
response = RestClient.get(url)
resp = JSON.parse(response)
if resp[0]['id'] == 0
return false # If no user exists return false
else
return resp[0]['email']
end
end
这里我试图模拟RestClient.get()方法并将一个虚拟电子邮件返回到login方法以设置会话。 以下是我的spec文件
it "mocks the api method checks the user with a Invalid email" do
RestClient.should_receive(:get).and_return('[{"id":"0"}]')
get :authenticate
expect(response).to redirect_to '/signin'
end
但是我需要将电子邮件和密码传递给authenticate方法。我在这里遇到两个问题 1)如何将电子邮件和密码传递给authenticate方法 2)当我在没有上述参数的情况下调用authenticate方法时,我得到一个像这样的错误
Failure/Error: url = 'http://localhost:8080/getUser/' + email
TypeError:
no implicit conversion of nil into String
那么如何通过使用一些虚拟电子邮件和密码调用authenticate方法来模拟RestClient.get()方法并返回一些JSON作为响应?
答案 0 :(得分:0)
在RSpec中,您可以将Hash
方法中的参数作为get
传递
get :show, email: 'abc@gmail.com', password: '1234567890'