我可以如何/在哪个匹配器中测试@product.industry_products.build
,其余是在我的行动中定义的?
products_controller
def new
@product = Product.new
authorize @product
@product.industry_products.build
@product.product_features.build
@product.product_usecases.build
@product.product_competitions.build
end
products_controller_spec.rb
context "GET new" do
let!(:profile) { create(:profile, user: @user) }
before(:each) do
get :new
end
it "assigns product" do
expect(assigns(:product)).to be_a_new(Product)
end
it { is_expected.to respond_with 200 }
it { is_expected.to render_template :new }
end
答案 0 :(得分:1)
您可以使用模拟来检查代码中是否调用了某些方法:
expect_any_instance_of(Product).to receive_message_chain(:industry_products, :build).and_call_original
expect_any_instance_of(Product).to receive_message_chain(:product_features, :build).and_call_original
这些应在调用new
动作之前声明。
但是,在我看来,测试某些方法是否被调用在这个例子中并不是那么有用,因为你的控制器动作中没有条件逻辑。检查产品关联是否存在可能是一种更可靠的测试。