【发布时间】:2017-10-16 23:32:12
【问题描述】:
我是测试和学习 Rspec 的新手,我无法让它正常工作。
(我已经阅读了《Effective testing with Rspec3》一书,以及许多教程...还有复数网站)
情况很简单。在Companies 控制器中,我想测试de Create 方法,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,使用 instance double...测试创建操作,并模拟“save()”返回 true...等等
我不知道我是否解释得很好,但是鉴于create 的controlloer 动作,如何使用模拟和存根进行测试,instance_double?
谢谢
【问题讨论】:
标签: ruby-on-rails rspec