- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 Mocha 测试未能通过 assert.equal
,尽管这两个项目似乎是相同的。我可能不明白测试是如何运行的,但即使错误输出也显示了 2 个类似的内容:
states.js
const sqlite3 = require('sqlite3').verbose();
const util = require('util');
async function getDB() {
return new Promise(function(resolve, reject) {
let db = new sqlite3.Database('./project.db', (err) => {
if (err) {
console.error(err.message);
reject(err)
} else {
console.log('Connected to the project database.');
resolve(db)
}
});
return db
});
}
exports.getDB = getDB
try {
// run these statements once to set up the db
// let db = getDB();
// db.run(`CREATE TABLE services(id INTEGER PRIMARY KEY, service text, date text)`);
// db.run(`INSERT INTO services(id, service, date) VALUES (1, 'blah', '01-23-1987')`)
} catch(err) {
console.log(err)
}
// is working
exports.get = async function(service) {
function getResults(service) {
return new Promise(async function (resolve, reject) {
const db = await getDB();
let sql = `SELECT Id id,
Service service,
Date date
FROM services
WHERE service = ?`;
db.get(sql, [service], (err, row) => {
if (err) {
console.error(err.message);
reject(err)
} else {
if (row) {
let this_row = {'id': row.id, 'service': row.service, 'date': row.date};
this_row ? console.log(row.id, row.service, row.date) : console.log(`No service found with the name ${service}`);
resolve(this_row)
} else {
resolve(null)
}
}
})
});
}
let row = await getResults(service)
return row
}
let row = exports.get('blah')
console.log("Printing out what get returns:")
console.log(row)
exports.set = async function(service, state) {
function setResults(service) {
return new Promise(async function (resolve, reject) {
const db = await getDB();
let sql = `UPDATE services
set id = ?,
service = ?,
date = ?
WHERE service = ?`;
try {
db.run(sql, [state.id, service, state.date, service]);
resolve();
} catch(err) {
reject(err);
}
});
}
await setResults(service)
}
exports.set('blah', {'id': 1, 'date': '01-23-1987'})
exports.clear = async function(service) {
function deleteResults(service) {
return new Promise(async function (resolve, reject) {
const db = await getDB();
let sql = `DELETE from services
WHERE service = ?`;
db.run(sql, [service]);
});
}
await deleteResults(service)
}
测试.js
const mocha = require('mocha');
const assert = require('assert');
const expect = require('chai').expect;
const should = require('chai').should();
const state = require('../state');
let deletion_sql = `DELETE from services WHERE service = ?`;
it("get() should return the expected row", async function() {
let db = await state.getDB()
await db.run(deletion_sql, 'blah')
await db.run(`INSERT INTO services(id, service, date) VALUES (1, 'blah', '01-23-1987')`)
let result = await state.get('blah')
console.log("get test result is")
console.log(result)
assert.equal(result, { 'id': 1, 'service': 'blah', 'date': '01-23-1987' })
});
it("set() should set to new values as expected", async function() {
let db = await state.getDB()
await db.run(deletion_sql, 'blah')
await db.run(`INSERT INTO services(id, service, date) VALUES (1, 'blah', '01-23-1987')`)
await state.set('blah', {'id': 5, 'date': '05-22-2222'})
let result = await state.get('blah')
console.log("set test result is")
console.log(result)
assert.equal(result, { 'id': 5, 'service': 'blah', 'date': '05-22-2222' })
});
it("clear() should delete row from db", async function() {
await state.clear('blah')
let result = await state.get('blah')
assert.equal(result, null)
})
输出如下:
get test result is
{ id: 1, service: 'blah', date: '01-23-1987' }
1) get() should return the expected row
5 'blah' '05-22-2222'
set test result is
{ id: 5, service: 'blah', date: '05-22-2222' }
2) set() should set to new values as expected
3) clear() should delete row from db
0 passing (2s)
3 failing
1) get() should return the expected row:
AssertionError [ERR_ASSERTION]: { id: 1, service: 'blah', date: '01-23-1987' } == { id: 1, service: 'blah', date: '01-23-1987' }
+ expected - actual
at Context.<anonymous> (src\tests\testStates.js:26:12)
at process._tickCallback (internal/process/next_tick.js:68:7)
2) set() should set to new values as expected:
AssertionError [ERR_ASSERTION]: { id: 5, service: 'blah', date: '05-22-2222' } == { id: 5, service: 'blah', date: '05-22-2222' }
+ expected - actual
当项目实际上不同时,它通常会在错误下方显示带有 + 和 - 的差异,但这里预期和实际为空白,并且 == 显示测试 1 和 2 的 2 个相同项目。为什么会断言.相同项目的相同测试失败?这些元素一定是我遗漏了一些东西。它们是否不同,因为它仍然将其表示为 promise 而不是对象?我确实对两者都使用了 await
关键字。
最佳答案
我建议您更改断言以使用 chai 的 deepEqual()比较 JavaScript 对象时。因此,您可以比较对象,以便它们具有相同的键和相同的值。
如果您使用 equal()方法就像您在示例中使用 ==
比较实际对象和预期对象一样。通常,在比较 JavaScript 对象时,这不是您感兴趣的内容(除非您要比较引用同一对象的两个变量,但我建议您改用 strictEqual())。
关于javascript - Mocha 测试相同对象的assert.equal 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56156157/
测试返回类型为 bool 的方法时。 你应该: expected = true; Assert.AreEqual(expected, actual); 或 Assert.IsTrue(actual);
我最近在编写新的 NUnit 测试时尝试使用 Assert.Equals() 方法。执行此方法时会抛出一个 AssertionException ,说明Assert.Equals 不应该用于断言。 乍
在 Chai 断言库中,当我们已经有了“assert.deepEqual()”时,“assert.equal()”有什么用"和 "assert.strictEqual()"用于严格和深度相等断言?还提
有没有办法断言 puppet 中的变量(或更具体地说,事实)具有特定值,如果没有则中止安装? 对于背景,情况如下: 在大多数情况下,我可以引用主机名,但有时我需要使用 IP 地址。例如,我们的日志收集
喜欢什么: Assert.That(obj.Foo, Is.EqualTo(true)) 或 Assert.True(obj.Foo) 对我来说,这两个断言是等价的,那么应该首选哪个? 最佳答案 在这
如何在 xUnit 中找到多个断言或软断言?我发现 Nunit 有以下能力,试图在 xUnit 中找到类似的选项。 Assert.Multiple(() => { Assert.AreEqua
有什么区别: Assert.Equals和 Assert.AreEqual Assert.NotNull和 Assert.IsNotNull ... ? 最佳答案 Assert.Equals 是一个对
我想写一个像这样工作的断言函数: //the following expression outputs "assertion failed" to std::err and then terminat
有人可以指出差异吗? 以上确实是我的问题,但是如果您也可以与他们分享您的经验以及您为什么使用其中一个。 最佳答案 它们只是两个不同的库,因此只需查看功能,尤其是报告功能,然后选择即可。 因为我是 的作
我无法找到断言 1 失败但断言 2 通过的原因: var a = Test.test1; var b = Test.test1; a.Should().BeSameAs(b); //1 Assert.
我正在为每个步骤使用 NUnit 断言运行自动化 BDD 步骤,即 Then And 我的 UI 测试。 NUnit 断言仅限于每个方法。这意味着如果方法中的断言失败,则不会运行其他步骤。 我正在考虑
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我只是在寻找一些示例,说明何时适合使用 Assert.Catch 或 Assert.Throws 断言单元测试中抛出的任何异常。我知道我也可以使用 ExpectedException,但我特别想知道“
Assert.AreEqual 和 Assert.AreSame 有什么区别? 最佳答案 这意味着 AreSame() 检查它们是否是完全相同的对象 - 如果引用指示内存中的相同对象。 AreEqua
在C#中,有什么区别 Assert.AreNotEqual 和 Assert.AreNotSame 最佳答案 这里给出的几乎所有答案都是正确的,但可能值得举个例子: public static str
我曾经在 NUnit 中使用过它们,它们非常有用。知道如何做类似的事情吗? 编辑,代码示例: bool condition = false;//would be nice not to have th
关于Arrange-Act-Assert的经典测试模式,我经常发现自己在 Act 之前添加了反断言。这样我就知道传递的断言确实是作为操作的结果传递的。 我认为它类似于红绿重构中的红色,只有当我在测试过
每当我创建断言时,Eclipse 都会建议我从这两个包之一导入它。 例如,当我尝试使用 assertArrayEquals() 比较数组时Eclipse 建议从其中之一导入它 org.junit.As
每当我创建断言时,Eclipse 都会建议我从这两个包之一导入它。 例如,当我尝试使用 assertArrayEquals() 比较数组时Eclipse 建议从其中之一导入它 org.junit.As
我是一名优秀的程序员,十分优秀!