小编Und*_*ion的帖子

使用包含多个关联和单独条件

我的Gallery模型中有以下查询:

media_items.includes(:photo, :video).rank(:position_in_gallery)
Run Code Online (Sandbox Code Playgroud)

我的Gallery模型has_many Media Items,每个都有一个Photo或一个Video关联.

到目前为止这个工作正常.它返回media_items包含它们 photovideo关联的所有内容,按position_in_gallery属性排序media_item.

但是我现在有一个要求限制了该查询返回到只有那些具有的属性的照片is_processing即是nil.

是否可以进行相同的查询,但返回的照片条件相当于:

.where(photo: 'photo.is_processing IS NULL')
Run Code Online (Sandbox Code Playgroud)

请注意,无论是否包含is_processing属性,都应返回所有视频.

我试过@ mudasbwa的建议:

includes(:photo, :video).where('photos.is_processing IS NULL').rank(:position_in_gallery)
Run Code Online (Sandbox Code Playgroud)

但它让我:

错误:表"照片"缺少FROM子句条目

ruby activerecord ruby-on-rails active-record-query ruby-on-rails-4

5
推荐指数
1
解决办法
4932
查看次数

使用HMR时启用Console.log输出到Webpack

我正在使用Webpack的HMR.

当我从终端运行webpack时,我得到了Weback自己的所有输出,但我在应用程序中的任何记录都只写入浏览器控制台,而不是写入终端中webpack的输出(我使用的是LogLevel,但同样的是真实的a console.log()).是否可以将控制台输出管道输出到Webpack,以便它显示在终端中?

console logging webpack webpack-hmr

5
推荐指数
0
解决办法
323
查看次数

是否有可能扩展Jest/Expect Matcher

我想扩展Jest的isEqual匹配器,以便在比较之前转换期望值(这允许我在测试中使用多行字符串).我需要做的就是通过indentToFirstLinelib中的函数运行期望值:indent-to-first-line在传递给它之前isEqual.显然我不希望在我需要的任何地方都这样做,所以将它折叠成匹配器是有意义的,因为我想要与Jest/Expect的isEqual匹配器相同的功能,所以使用它是有意义的.

我尝试过以下方法:

import indentToFirstLine from 'indent-to-first-line'
import expect from 'expect'

const toEqualMultiline = (received, expectedTemplateString) => {
  const expected = indentToFirstLine(expectedTemplateString)
  return expect(received).toEqual(expected)
}

export default toEqualMultiline
Run Code Online (Sandbox Code Playgroud)

但是expect(received).toEqual(expected)不返回值,所以从我的匹配器返回的值undefined,导致Jest错误:

来自匹配器功能的意外返回.Matcher函数应该按以下格式返回一个对象:{message?:string | function,pass:boolean}'undefined'被返回

我可以toEqual在我自己的匹配器中使用吗?

javascript testing matcher jasmine jestjs

5
推荐指数
2
解决办法
491
查看次数

在Chrome中运行时如何使用赛普拉斯测试文件下载

我进行了以下测试,需要验证单击链接是否可以下载PDF。这一点特别重要,因为我们正在使用Gatsby,而后者又使用Reach Router的链接组件,并且配置错误相对容易,以便路由器接管链接并导航到404页面而不是启动下载。

describe.skip(`Downloads`, () => {
  it(`Downloads the expected file`, () => {
    cy.visit(pagePath)
    cy.getByHref(downloadPath)
      .should(`have.attr`, `target`, `_blank`)
      .click()
    cy.location(`pathname`).should(`eq`, pagePath)
  })
})
Run Code Online (Sandbox Code Playgroud)

虽然这并不完美,但它至少会检查单击链接后是否没有导航。

问题在于,当使用cy run进行运行此测试(在Chrome中运行测试)时,由于Chrome的下载对话框,该测试将挂起。

如何防止测试挂起?

请注意,downloadPath解析为静态目录中的pdf,例如/static/example.pdf。没有服务器组件。

还要注意,这是一个不同的问题:我如何使用Cypress.io断言文件下载已经启动而没有实际下载?

javascript testing google-chrome download cypress

5
推荐指数
1
解决办法
2358
查看次数

如何使用赛普拉斯测试客户端重定向到第 3 方站点?

Cypress 提供了一种使用request测试服务器端重定向的简单方法:

cy.request({
  url: `/dashboard/`,
  followRedirect: false, // turn off following redirects
}).then((resp) => {
  expect(resp.redirectedToUrl).to.eq('http://example.com/session/new')
})

Run Code Online (Sandbox Code Playgroud)

但是,这不适用于客户端重定向,因为页面在重定向发生之前已成功加载,这意味着响应是针对页面的,而不是针对重定向的。

如何测试客户端重定向?

我需要一种捕获重定向并验证的方法:

  • 发生了
  • 是正确的网址。

笔记:

  • 我不想跟随重定向远离正在测试的应用程序。我不是在测试整个身份验证流程。我只需要知道有重定向。
  • 我无法更改此身份验证流程。重定向是不可避免的。
  • 重定向发生在初始化期间,而不是任何用户交互的结果。
  • 重定向使用: window.location.href = url
  • 请参阅下面我的回答以尝试解决此问题。

javascript testing redirect cypress

5
推荐指数
1
解决办法
478
查看次数

使用 Reach 路由器导航到 404 路由

我有以下路由配置:

<Router>
 <NotFound default />
 <ResourcesContainer path="/resources" />
 <ResourceContainer path="/resources/:id" />
 ...
</Router>
Run Code Online (Sandbox Code Playgroud)

这会捕获任何未处理的路由,并<NotFound />在未找到的 URL 处呈现组件,因此如果我键入example.com/blah,我会看到<NotFound />呈现的组件,并且在地址栏中会看到example.com/blah。我还在页面上使用此 URL 来显示消息:

找不到页面“example/blah”。

到目前为止,一切都很好。但是我还需要从/resources/*路由内部处理 404。我的<ResourcesContainer/>组件使用路径的最后一部分来访问具有该 id 的资源的 GraphQL API。如果 API 返回告诉客户端资源不存在,我想模仿上面概述的行为。但是,我没有可以导航到的页面。我可以复制该<NotFound />路线并给它一个明确path/404,然后导航到该路线。然而,URL 将是/404,而不是resources/*未找到的原始路径。

以下解决了部分问题,给了我一个重定向 ot 的页面,但意味着/404在所有情况下 URL 都会被重写:

<Router>
 <ResourcesContainer path="/resources" />
 <ResourceContainer path="/resources/:id" />
 <NotFound path="/404" />
 <Redirect noThrow from="*" to="/404" />
 ...
</Router>
Run Code Online (Sandbox Code Playgroud)

我该如何设置才能在不丢失原始 …

javascript routes http-status-code-404 reactjs reach-router

5
推荐指数
1
解决办法
1854
查看次数

模拟位置,包括Xcode 4.2/iOS5中的移动

我已经看到Apple在iOS5中演示了新的模拟器功能,除静态位置外,他们还展示了在模拟器上运行的应用程序上模拟位置移动的能力.我已经使用GPX文件成功模拟了单个位置,但我找不到任何模拟运动的方法.

这个功能在最后一刻被丢弃了还是我错过了一些明显的东西?

simulator core-location ios ios5 xcode4.2

4
推荐指数
2
解决办法
7601
查看次数

Objective C/C静态方法性能

这是Apple的一些示例代码中的类的方法.为什么将此方法定义为静态C方法而不是Objective C类方法或类方法?在使用它的上下文中,我认为它需要尽可能高效.这是为什么?这是声明方法最高效的方法吗?

static BOOL lineIntersectsRect(MKMapPoint p0, MKMapPoint p1, MKMapRect r)
{
    //Do stuff
    return MKMapRectIntersectsRect(r, r2);
}
Run Code Online (Sandbox Code Playgroud)

c methods performance static objective-c

4
推荐指数
1
解决办法
1036
查看次数

UIView应如何获得对其子女的引用?

我有一个带有根视图的xib,它是一个UIView子类.该视图应如何获取我在Interface Builder中声明的子视图的引用?

显然,ViewController可以与插座连接,但是UIView呢?

iphone cocoa-touch children uiview ios5

4
推荐指数
1
解决办法
9031
查看次数

如果只包含空字符串,则拒绝数组的更优雅方法

我必须排序(行)数组(行)数组.(行)数组包含任意数量的字符串.如果(行)数组只包含空字符串,我想从(行)数组中删除它.

我现在正在这样做:

rows.each do |row|

  row.each_index do |i|

   if row[i].length > 0
    break 
   elsif i == row.count-1
    rows.delete(row)
   end

  end

end
Run Code Online (Sandbox Code Playgroud)

但有更优雅的方式吗?

ruby arrays ruby-on-rails-3

4
推荐指数
1
解决办法
3571
查看次数