我想运行一些测试,其设置需要先通过HTTP GET下载。
我的下载成功但我的测试在请求回调中没有运行。我知道它不是最好的结构,但我也想知道为什么这不起作用。
describe('test', () => {
request.get({
url: 'https://google.com',
}, (err, status, body) => {
// The content is downloaded successfully.
console.log(body);
// This test never runs, why?
it('should be able to run inside a request.get', () => {
});
});
});
我知道这段代码有效,但我仍然想知道为什么上一个例子没有。
describe('test', () => {
it('should be able to run inside a request.get', () => {
request.get({
url: 'https://google.com',
}, (err, status, body) => {
console.log(body);
});
});
});
编辑:Jankapunkt的评论提供的建议有效:移动'它'并且'描述'一起允许成功下载和测试运行。
request.get({
url: 'https://google.com',
}, (err, status, body) => {
// The content is downloaded successfully.
console.log(body);
// The describe and it are within the same closure.
describe('test', () => {
// This test runs successfully.
it('should be able to run inside a request.get', () => {
});
});
});
答案 0 :(得分:0)
古老的主题,但我确实是想在模拟蒙哥连接中使用
:const manager = require('./manager')
const assert = require('assert')
const MongoClient = require('./MockMongo')
let conn
describe('test execution', function() {
it('db connection', function (done) {
MongoClient.connect('test url')
.then((db) => {
conn = db
done()
})
})
it('test 1', function (done) {
manager.methodOfManager(conn, 'param1', 'param2')
.then(r => {
assert.equal(r.result, 'ok')
done()
})
.catch(err => {
console.log(err.message)
done(err)
})
})
})
它将打印:
测试执行
✓ db connection (5ms) ✓ Test 1 (sepa) (125ms)
2通过(0s)
答案 1 :(得分:-1)
方法1:在GET结果中进行测试
在回调函数中的describe()
周围使用it()
,并避免使用以下箭头函数:
it("...", () => {});
当你改变上下文时它is discouraged in mocha。
改为使用
it("...", function(){});
并在async tests中需要时使用.bind
,done()
或承诺。
将这些放在您的代码示例中,您可能会发现您的代码与以下内容类似:
request.get({
url: 'https://google.com',
}, (err, status, body) => {
// The content is downloaded successfully.
describe('test', function() {
it('should be able to run inside a request.get', function() {
assert.isDefined(status);
assert.isDefined(body);
//...and so on
});
});
});
顺便说一句,如果你的方法是更好的结构,那只是一个糟糕的结构。
方法2 - 在您的单位中包裹request.get
这是(在我看来)更好,更像mocha的方法,你在测试中执行请求并使用done()
回调通知mocha,你已经完成了:
describe('test', function() {
let request;
beforeEach(function(){
// request = ...
});
it('should be able to get a request result', function(done) {
request.get({
url: 'https://google.com',
}, (err, status, body) => {
assert.isDefined(status);
assert.isDefined(body);
//...and so on
// at the end call done
done();
});
});
您可以使用beforeEach挂钩确保将每个测试的请求初始化为新的新实例。