gpt4 book ai didi

javascript - TDD原理,如何让测试失败

转载 作者:行者123 更新时间:2023-12-03 08:37:45 26 4
gpt4 key购买 nike

我实际上正在研究TDD等,我通过例子来学习。

实际上,我正在构建一个小的(非常非常小的)ORM,以向我介绍真正的单元测试,带有 stub 和模拟。

我这样运行,我进行了测试并进行了一些小实现(getAll 方法)(失败 -> 使测试通过 -> 重构)

实际上,这是我的代码:

Mongodb适配器

export default class MongoAdapter{
getAll(){
return new Promise((resolve, reject)=>{
resolve(['a','b','c','d']);
});
}
}

MysqlAdapter

export default class MysqlAdapter{

getAll(){
return new Promise((resolve, reject)=>{
resolve(['a','b','c','d','e']);
});
}
}

FactoryAdapter类

import MysqlAdapter from './adapters/MysqlAdapter';
import MongoAdapter from './adapters/MongoAdapter';

export default class FactoryAdapter{

static get(name){
if(name.toLowerCase() === 'mysql') return new MysqlAdapter();
if(name.toLowerCase() === 'mongodb') return new MongoAdapter();
return null;
}

}

相关单元测试:

TestMongoAdapter

import FactoryAdapter from '../../app/FactoryAdapter';

let chai = require('chai');
let sinon = require("sinon");
let expect = chai.expect;

/** @test {MongoAdapter} */
describe('MongoAdapter class',function(){

/** @test {MongoAdapter#getAll} */
describe('MongoAdapter#getAll',function(){
it('Expect getAll() to equals [a,b,c,d]',function(done){
let adapter = FactoryAdapter.get('mongodb');
adapter.getAll().then((value)=>{
expect(value).to.deep.equal(['a','b','c','d']);
done();
});
});
});
});

另外两个以此类推。我的问题不在于这种情况下的语法方式。

问题

实际上,我想在相关适配器内使用来自 MYSQL 和 MONGODB 的数据库驱动程序。实际上,我知道我应该做什么:在 FactoryAdapter.get 中创建适配器的实例时,将驱动程序传递到适配器的构造函数方法内

我的问题是,从那时起,我不知道在实现我的代码之前应该编写哪个测试(应该会失败)。

最佳答案

其实你用得还蛮多的。 :D

数据库适配器测试是集成测试,而不是单元测试。你不能脱离数据库来测试它......每个测试都有相同的结构(根据 phpunit 手册),你有一个固定装置,你在固定装置上运行测试并做出断言。如果您希望测试失败,您需要编写失败的断言。例如。您有一个数据库固定装置,其中包含数据,并且代码应该检索该数据。您编写一个断言,它需要代码应从数据库检索的数据。它失败。之后您就可以处理代码了。这就是数据库测试的全部内容。

如果一个类使用您的数据库适配器,那么您必须模拟该适配器;创建一个假类,你完全控制。之后,您可以注入(inject)模拟适配器而不是真实的适配器,并测试该类对其调用哪些方法。您可以将夹具注入(inject)模拟适配器。例如。您设置 getAll 返回带有一些数据的 Promise,而不是访问数据库并发送数据查询。

我看到你用的是sinon。这是有关模拟的文档 http://sinonjs.org/docs/#mocks-api .

关于javascript - TDD原理,如何让测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33144358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com