Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 工厂女工的奇怪行为_Ruby On Rails_Ruby_Factory Bot - Fatal编程技术网

Ruby on rails 工厂女工的奇怪行为

Ruby on rails 工厂女工的奇怪行为,ruby-on-rails,ruby,factory-bot,Ruby On Rails,Ruby,Factory Bot,我有一些测试模型: 使用者 承包人 FactoryGirl.define do factory :contractor, :parent => :user, class: 'Contractor' do type 'Contractor' u_token 'contractor' end end 顾客 FactoryGirl.define do factory :customer, :parent => :user, class: 'Customer'

我有一些测试模型: 使用者

承包人

FactoryGirl.define do
  factory :contractor, :parent => :user, class: 'Contractor' do
    type 'Contractor'
    u_token 'contractor'
  end
end
顾客

FactoryGirl.define do
  factory :customer, :parent => :user, class: 'Customer' do
    type 'Customer'
    u_token 'customer'
    contractor
  end
end
顾客呢

FactoryGirl.define do
  factory :customer_e, :parent => :user, class: 'CustomerE' do
    type 'CustomerE'
    u_token 'customer_e'
    contractor
    customer
  end
end
在我的测试中,我有:

setup do
    @customer = FactoryGirl.create :customer
    @contractor = @customer.contractor
end
我的测试一切正常。 但如果我加上

setup do
    @customer_e = FactoryGirl.create :customer_e
    @customer = FactoryGirl.create :customer
    @contractor = @customer.contractor
end
然后我的一些测试失败了。为什么会这样? 我并不是在所有情况下都使用
@customer\u e

编辑: 好的,我的show user方法:

  def show
    user = User.find_by_u_token(params[:u])
    if !user
      render json: {status: 'error', descr: 'INVALID_U_TOKEN'}
      return
    end

    user = find_user_for_user(user, params[:id])
    if !user
      render json: {status: 'error', descr: 'INVALID_USER_ID'}
      return
    end

    render json: {status: 'ok', user: {email: user.email,
                                       first_name: user.first_name,
                                       last_name: user.last_name,
                                       address: user.address,
                                       country: user.country,
                                       zip: user.zip,
                                       city: user.city,
                                       phone: user.phone,
                                       company_name: user.company_name,
                                       signature: user.signature,
                                       lang:user.lang}}
  end
  def find_user_for_user(user, user_id)
    users = users_for_user(user)
    users.detect {|u| u.id == user_id.to_i}
  end

  def users_for_user(user)
    users = []
    case user.type
      when 'Contractor'
        users << user
        user.contractorEs.each do |cne| users << cne end
        user.customers.each do |cs| users << cs end
        user.customerEs.each do |cse| users << cse end
      else
        users << user.contractor
        user.contractor.contractorEs.each do |cne| users << cne end
        user.contractor.customers.each do |cs| users << cs end
        user.contractor.customerEs.each do |cse| users << cse end
    end
    users
  end
以及我的查找用户方法:

  def show
    user = User.find_by_u_token(params[:u])
    if !user
      render json: {status: 'error', descr: 'INVALID_U_TOKEN'}
      return
    end

    user = find_user_for_user(user, params[:id])
    if !user
      render json: {status: 'error', descr: 'INVALID_USER_ID'}
      return
    end

    render json: {status: 'ok', user: {email: user.email,
                                       first_name: user.first_name,
                                       last_name: user.last_name,
                                       address: user.address,
                                       country: user.country,
                                       zip: user.zip,
                                       city: user.city,
                                       phone: user.phone,
                                       company_name: user.company_name,
                                       signature: user.signature,
                                       lang:user.lang}}
  end
  def find_user_for_user(user, user_id)
    users = users_for_user(user)
    users.detect {|u| u.id == user_id.to_i}
  end

  def users_for_user(user)
    users = []
    case user.type
      when 'Contractor'
        users << user
        user.contractorEs.each do |cne| users << cne end
        user.customers.each do |cs| users << cs end
        user.customerEs.each do |cse| users << cse end
      else
        users << user.contractor
        user.contractor.contractorEs.each do |cne| users << cne end
        user.contractor.customers.each do |cs| users << cs end
        user.contractor.customerEs.each do |cse| users << cse end
    end
    users
  end

问题是
数据实际上是
{“status”=>“error”,“descr”=>“INVALID\u USER\u ID”}

我知道你在九个月的时间里问了21个问题,所以如果下面的问题看起来很简单,我很抱歉,但是考虑到你的问题和你的评论,我觉得这是我能给出的唯一答案

规范的StackOverflow问题提供了一些代码、对特定结果的期望或期望以及与该结果不同的一些输出。一个问题被隐式或显式地提出,即为什么输出与愿望或期望不同

在您的例子中,您已经提供了一些代码、期望(没有错误)和一些明确的问题

然而,尽管有两个用户试图帮助您,但您还没有提供所获得的输出。第一个问题是“您得到了什么错误或异常”?第二个人问:“你犯了哪些错误?”?你对这两个问题的回答都是“我的show user方法失败了,很多逻辑都在哪里”。这没有提供任何细节和输出

在Ruby中,当发生错误时,通常会得到一些错误消息和堆栈跟踪,后者提供“面包屑跟踪”,告诉您通过所进行的一系列方法调用执行的是什么软件。对于每个方法,都会给出源文件和源文件中的行号。通常,如果要找出错误发生的位置,可以查看堆栈中每个位置周围的代码。如果您试图获得问题的帮助,您通常需要共享与每个职位相关的代码(例如,您在该职位的方法的代码)。你一点也没做过

对于您的具体情况,您说过,当您向设置中添加分配时,您的代码失败,形式如下:

@customer_e = FactoryGirl.create :customer_e
然后你接着说:

然后我的一些测试失败了。为什么会这样?我在中不使用@customer\u e 所有案例

添加您的评论:


我的show user方法下,很多逻辑在哪里

在没有输出或代码的情况下,无法提供代码“失败”的具体原因,但我们可以提供一个通用的答案

您的代码失败,因为存在一些条件逻辑,如果您包含的附加代码已被执行,这些条件逻辑的行为会有所不同(例如,
show
方法中的代码取决于定义的
@customer\e


并非所有情况下都使用
@customer\u e
这一事实并不相关,因为只需使用一次就会导致错误。

测试如何失败?你得到了什么错误或异常?你得到了什么错误?我的show user方法失败了,有很多逻辑仍然没有提供错误消息或堆栈跟踪。你说“数据是…”,但你没有说你在谈论什么数据,也没有说故障发生在代码中的什么地方。在这一行中,错误发生
assert_equal@contractor.email,data['user']['email']
。这个断言没有通过,
数据
包含
{“status”=>“error”,“descr”=>“INVALID\u USER\u ID”}
我担心我的保密协议,但我已经编辑了我的帖子