Ruby on rails RubyonRails 4-Rspec:count本应更改为1,但更改为0
我目前正在开发一个RubyonRails应用程序,对测试还不熟悉。几天前,我开始使用gemsRuby on rails RubyonRails 4-Rspec:count本应更改为1,但更改为0,ruby-on-rails,ruby,rspec,ruby-on-rails-4,factory-bot,Ruby On Rails,Ruby,Rspec,Ruby On Rails 4,Factory Bot,我目前正在开发一个RubyonRails应用程序,对测试还不熟悉。几天前,我开始使用gemsrspec-rails、factory\u-girl\u-rails和faker编写测试 为模型验证编写测试非常容易,但现在我被困在编写控制器测试上。 我使用scaffold命令创建了一个简单的类“Message” 模式: create_table "messages", force: true do |t| t.string "name" t.string "email" t.str
rspec-rails
、factory\u-girl\u-rails
和faker
编写测试
为模型验证编写测试非常容易,但现在我被困在编写控制器测试上。
我使用scaffold命令创建了一个简单的类“Message”
模式:
create_table "messages", force: true do |t|
t.string "name"
t.string "email"
t.string "text"
t.datetime "created_at"
t.datetime "updated_at" end
当我尝试运行以下测试时
规范/控制器/消息\u控制器\u规范.rb:
describe "POST create" do
describe "with valid params" do
it "creates a new Message" do
expect {
post :create, FactoryGirl.create(:message)
}.to change(Message, :count).by(1)
end
end
end
…我收到了这个错误消息
MessagesController后期创建
使用有效参数
创建新消息(失败-1)
失败:
1) MessagesController使用有效参数后创建将创建新的
消息
失败/错误:预期{
计数应更改为1,但更改为0
…通过使用此选项:
spec/factories/message.rb:
require "faker"
FactoryGirl.define do
factory :message do |m|
m.name { Faker::Name.name }
m.email { Faker::Internet.email }
m.text { Faker::Lorem.sentences }
end
end
我一直在寻找答案,但到目前为止,我还没有找到一个适合我的解决方案。我希望任何人都能帮助我
谢谢
这是我的模型:(但即使我删除了所有验证,我也会收到相同的错误消息)
功能:消息参数
def message_params
params.require(:message).permit(:name, :email, :text)
end
将
attributes\u用于
方法,该方法返回可用于构建消息实例的属性散列
describe "POST create" do
describe "with valid params" do
it "creates a new Message" do
expect {
post :create, FactoryGirl.attributes_for(:message) ## Use attributes_for
}.to change(Message, :count).by(1)
end
end
end
FactoryGirl.create(:message)
实际上会在messages
表中保存一条记录。
对于控制器测试,您只需传递属性的散列,然后post:create
将调用messagescoontroller\create
操作,该操作将把记录保存在数据库中
编辑
用m.text{Faker::Lorem.paragration}
替换m.text{Faker::Lorem.paragration}
。
As语句
返回字符串数组,而模型消息
中的字段文本
需要字符串。这将导致错误并无法保存记录
require "faker"
FactoryGirl.define do
factory :message do |m|
m.name { Faker::Name.name }
m.email { Faker::Internet.email }
m.text { Faker::Lorem.paragraph } ## Use paragraph instead of sentences
end
end
您可以显示消息模型吗?应该创建的
消息在哪里?在rspec中(调用FactoryGirl.create(:message)
或在控制器中(调用post:create,…
)?这就是我的消息模型的样子:class message消息
模型和消息控制器#创建
操作。这是我的模型:类消息 describe "POST create" do
describe "with valid params" do
it "creates a new Message" do
expect {
post :create, FactoryGirl.attributes_for(:message) ## Use attributes_for
}.to change(Message, :count).by(1)
end
end
end
require "faker"
FactoryGirl.define do
factory :message do |m|
m.name { Faker::Name.name }
m.email { Faker::Internet.email }
m.text { Faker::Lorem.paragraph } ## Use paragraph instead of sentences
end
end