微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

失败/错误:let(:completed_task) { Task.create!(completed_at: 1.day.ago, size: 1) }

如何解决失败/错误:let(:completed_task) { Task.create!(completed_at: 1.day.ago, size: 1) }

我向 spec/views/projects/index.html.erb_spec.rb 文件添加了一些测试。也许是因为版本更改,我收到了错误消息。代码是为 Rails 5 编写的,我使用的是 Rails 6。

这是我面临的错误

Failures:

  1) projects/index renders the index page with correct dom elements
     Failure/Error: let(:completed_task) { Task.create!(completed_at: 1.day.ago,size: 1) }
     
     ActiveRecord::NotNullViolation:
       sqlite3::ConstraintException: NOT NULL constraint Failed: tasks.project_id

2) adding a project allows a user to create a project with tasks
     Failure/Error: (Time.zone.today + projected_days_remaining) <= due_date
     
     ActionView::Template::Error:
       Infinity

这两个错误都来自 spec/views/projects/index.html.erb_spec.rb 文件

这是 spec/views/projects/index.html.erb_spec.rb 文件

require "rails_helper"

describe "projects/index" do
    let(:completed_task) { Task.create!(completed_at: 1.day.ago,size: 1) }
    let(:on_schedule) { Project.create!(
    due_date: 1.year.from_Now,name: "On Schedule",tasks: [completed_task]) }
    let(:incomplete_task) { Task.create!(size: 1) }
    let(:behind_schedule) { Project.create!(
    due_date: 1.day.from_Now,name: "Behind Schedule",tasks: [incomplete_task]) }
    it "renders the index page with correct dom elements" do
        @projects = [on_schedule,behind_schedule]
        render
        expect(rendered).to have_selector("#project_#{on_schedule.id} .on_schedule")
        expect(rendered).to have_selector("#project_#{behind_schedule.id} .behind_schedule")
    end
end

这是 app/views/projects/index.html.erb 文件

<h1>All Projects</h1>
<table>
  <thead>
    <tr>
      <td>Project Name</td>
      <td>Total Project Size</td>
    </tr>
  </thead>
  <tbody>
    <% @projects.each do |project| %>
    <tr class="project-row" id="<%= dom_id(project) %>">
      <td class="name"><%= name_with_status(project) %></td>
      <td class="total-size"><%= project.size %></td>
    </tr>
    <% end %>
  </tbody>
</table>

解决方法

发生这种情况是因为每个任务都有新版本的项目要求,请使用以下内容更改您的文件 spec/views/projects/index.html.erb_spec.rb,我只是在做一些事情,例如我正在制作项目但不添加任务,并且在任务 我正在添加项目,现在通常应该连接,但由于规范运行,我也在 it 块内部将它们连接在一起。

# frozen_string_literal: true

require 'rails_helper'
describe 'projects/index' do
  let(:on_schedule) do
    Project.create!(
      due_date: 1.year.from_now,name: 'On Schedule'
    )
  end

  let(:behind_schedule) do
    Project.create!(
      due_date: 1.day.from_now,name: 'Behind Schedule'
    )
  end

  let(:completed_task) do
    Task.create!(
      completed_at: 1.day.ago,size: 1,project: on_schedule
    )
  end

  let(:incomplete_task) do
    Task.create!(
      size: 1,project: behind_schedule
    )
  end

  it 'renders the index page with correct dom elements' do
    on_schedule.tasks << completed_task
    behind_schedule.tasks << incomplete_task

    @projects = [on_schedule,behind_schedule]
    render
    within("#project_#{on_schedule.id}") do
      expect(rendered).to have_selector('.on_Schedule')
    end

    expect(rendered).to have_selector(
      "#project_#{on_schedule.id} .on_schedule"
    )

    expect(rendered).to have_selector(
      "#project_#{behind_schedule.id} .behind_schedule"
    )
  end
end

我转换了我的项目,所以我注意到我必须再做一个更改,但我认为您的项目不需要它,因为我注意到项目没有考虑无限值所以我修改了方法 on_schedule? app/models/project.rb

中的以下更改
  def on_schedule?
    return false if projected_days_remaining.nan?  || projected_days_remaining.infinite?
    (Time.zone.today + projected_days_remaining) <= due_date
  end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。