这是我的第一个rspec测试,我使用Hurtl的教程,并认为它已经过时了。我想更改这一行,因为its
不再是rspec的一部分:
its(:user) { should == user }
我试着这样做:
expect(subject.user).to eq(user)
但得到一个错误
RuntimeError:#let或#subject调用时不带块
这是我的完整的rspec测试,如果你需要它:
require 'spec_helper'
require "rails_helper"
describe Question do
let(:user) { FactoryGirl.create(:user) }
before { @question = user.questions.build(content: "Lorem ipsum") }
subject { @question }
it { should respond_to(:body) }
it { should respond_to(:title) }
it { should respond_to(:user_id) }
it { should respond_to(:user) }
expect(subject.user).to eq(user)
its(:user) { should == user }
it { should be_valid }
describe "accessible attributes" do
it "should not allow access to user_id" do
expect do
Question.new(user_id: user.id)
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
end
end
describe "when user_id is not present" do
before { @question.user_id = nil }
it { should_not be_valid }
end
end
2条答案
按热度按时间eagi6jfj1#
是的,你一定是在遵循一个过时的版本,因为M。Hartl的Railstutorial书籍现在使用Minitest而不是RSpec。
不起作用,因为您调用
subject
时没有将其 Package 在it
块中。你可以把它重写为:
或者您可以使用
rspec-its
gem,它允许您在当前版本的RSpec中使用its
语法。但它仍然不是一个特别有价值的测试,因为您只是测试测试本身,而不是应用程序的行为。
此外,此规范适用于旧版本(pre 3.5)在模型级完成质量分配保护的轨道。
您可以在https://www.railstutorial.org/找到Rails教程的最新版本。
p1iqtdky2#
不能将
its(:user) { should == user }
直接转换为expect(subject.user).to eq(user)
。你必须用一个it
块包围它