我是测试和学习Rspec的新手,我无法让它工作。使用instance_double与belongs_to关联的Rspec3控制器进行测试
(我已阅读与Rspec3书有效的测试,很多教程...也pluralsight.com)
的情况是非常简单的。在Companies
控制器我想测试去创建方法,该company
模型belongs_to user
,这是代码:
我认为这个问题是测试执行
时:expect(Company).to receive(:new).with(company_params)
或控制器: @company.user=helpers.user
控制器:
class CompaniesController < SessionsController
def create
@company=Company.new(company_params)
@company.user=helpers.user
if @company.save()
redirect_to companies_path
else
render :edit
end
end
和RSpec:
RSpec.describe CompaniesController, type: :controller do
let(:user) { instance_double(User) }
before do
allow_any_instance_of(ApplicationHelper).to receive(:user){user}
allow(controller).to receive(:authorize){true}
end
describe 'Authenticated user with companies' do
let(:company_params) { {company:{name:"Albert",domain:"www.albert.com"}} }
let(:company) { instance_double(Company) }
before do
allow(Company).to receive(:new){company}
end
describe 'POST #create' do
context "with valid data" do
before { allow(company).to receive(:save){true} }
it "redirects to companies_path" do
expect(Company).to receive(:new).with(company_params)
expect(company).to receive(:user=).with(user)
post :create, params:{company: company_params}
expect(response).to redirect_to(companies_path)
end
我的目的很简单:使用instance_double嘲笑(或存根)@company和Company.new,使用实例双...测试创建行动,并模拟“保存()“返回true ...等
我不知道我是否很好地解释了自己,但是鉴于控制者的create
行为,如何使用mocks ans stubs,instance_double进行测试?
感谢
谢谢您回应,我会记住将来的测试。无论如何,在Pluralsight课程之后,我已经看到了如何在Create方法中存储所有方法,但不是Activerecord,只是简单的对象,而且我想知道如何存根,@ company.user =和xxx = Company.new(company_params)'...用'allow'和'expect' ...是否有可能将这些关联存根?我的代码应该如何在没有崩溃的情况下工作?再次感谢 –