te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Expect an array of float numbers to be close to another array in Jasmine - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Expect an array of float numbers to be close to another array in Jasmine - Stack Overflow

programmeradmin2浏览0评论

I'm testing a Javascript function returning an array of numbers, to see if the returned array contains the same elements as the array containing the expected output:

expect(myArray).toEqual(expectedArray);

This works flawlessly if myArray and expectedArray only contain integers, but fail if there is at least one float present, due to floating-point precision errors. toBeCloseTo does not seem to function on arrays.

Currently I'm doing a loop to to do member-wise checking:

for (var i = 0; i < myArray.length; i++) {
    expect(myArray[i]).toBeCloseTo(expectedArray[i]);
}

... but is there a cleaner way to do this? If the test fails for whatever reason, the output is bloated with a hideous amount of error messages.

I'm testing a Javascript function returning an array of numbers, to see if the returned array contains the same elements as the array containing the expected output:

expect(myArray).toEqual(expectedArray);

This works flawlessly if myArray and expectedArray only contain integers, but fail if there is at least one float present, due to floating-point precision errors. toBeCloseTo does not seem to function on arrays.

Currently I'm doing a loop to to do member-wise checking:

for (var i = 0; i < myArray.length; i++) {
    expect(myArray[i]).toBeCloseTo(expectedArray[i]);
}

... but is there a cleaner way to do this? If the test fails for whatever reason, the output is bloated with a hideous amount of error messages.

Share Improve this question asked Feb 10, 2016 at 14:45 John WeiszJohn Weisz 32k13 gold badges96 silver badges136 bronze badges 2
  • Check out toBeCloseTo it appears to do what you want. – HBP Commented Feb 10, 2016 at 15:13
  • 2 Maybe you can have a look at the ArrayContaining matcher, adapt the loop and create your own matcher. – Sonata Commented Feb 10, 2016 at 16:26
Add a ment  | 

3 Answers 3

Reset to default 14

The following code should answer your question:

function expectToBeCloseToArray(actual, expected) {
  expect(actual.length).toBe(expected.length)
  actual.forEach((x, i) =>
    expect(x).withContext(`[${i}]`).toBeCloseTo(expected[i])
  )
}

We very ofthen use this syntax

expect(...).toBeCloseToArray(array, x)
// Where x is the precision, i.e., the number of decimal places.  
// For example, if x = 3, it checks for three digits after the decimal point (1.XXX).

Try this:

for (let i=0; i<returnedArray.length; i++){
  if(expectedArray.indexOf(returnedArray[i]) === -1 ){
      console.log("not a match")
      break;
  }else{
      console.log("it's a match")
      break;
  }
}
发布评论

评论列表(0)

  1. 暂无评论