Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jasmine节点预期未执行_Javascript_Node.js_Jasmine Node - Fatal编程技术网

Javascript Jasmine节点预期未执行

Javascript Jasmine节点预期未执行,javascript,node.js,jasmine-node,Javascript,Node.js,Jasmine Node,我今天开始测试茉莉花,这对我来说是新的。由于我使用的是用NodeJS开发的GraphQL服务器,所以我使用的是jasmine节点 以下是我自己编写的第一个规范,我认为它是有效的: const request = require('request'); const config = require('../sources/config'); const base_url = `http://localhost:${config.graphqlPort}/${config.graphqlRoute

我今天开始测试茉莉花,这对我来说是新的。由于我使用的是用NodeJS开发的GraphQL服务器,所以我使用的是
jasmine节点

以下是我自己编写的第一个规范,我认为它是有效的:

const request = require('request');
const config = require('../sources/config');

const base_url = `http://localhost:${config.graphqlPort}/${config.graphqlRoute}`;

describe("GraphQLServer.", () => {
it("Should expect something.", () => {
    expect(1).not.toEqual(2);
    expect(1).toEqual(1);
    expect(true).toBe(true);
    expect(false).not.toBe(true);
});

describe('When request is made.', () => {
    it('Returns statuscode 200.', () => {
        request.get(base_url, (error, response, body) => {
            console.log('Error: ', error);
            console.log(base_url);
            console.log('StatusCode: ', response && response.statusCode);
            console.log('Body:', body);
            expect(true).toBe(true);
            expect(true).toBe(false);
            expect(response.statusCode).toBe(200);
            expect(response.statusCode).toBe(400);
            done();
            });
        });
    });
});
这将产生以下结果:

    ..

Finished in 0.018 seconds
2 tests, 4 assertions, 0 failures, 0 skipped


Error:  null
http://localhost:8000/graphql
StatusCode:  400
Body: {"errors":[{"message":"Must provide query string."}]}
这正是我所期望的。我执行的请求没有查询字符串,因此正文中的错误是预料中的

问题是:4个无用的(明显的)
期望
内部
它(“应该期望某事”)
工作正常。这些是结果中的
4个断言。其他4个
expect
中(“返回状态码200”)
并不在结果中(它们不会失败,也不会通过),而是
控制台.log


我在网上找到的每一个例子似乎都与我在这里所做的完全一样,但我没有成功地实现这一点。

我忘记了Jasmine中建议修复的确切语法,但我相信我知道答案:这是一个用承诺进行测试的经典案例。测试完成后,结果会返回,因此您的
expect
调用不会在可能影响测试的上下文中发生


我注意到您的代码和jasmine node文档之间的一个区别是,传递给它的函数应该将
done
作为参数,但是您使用
()=>
而不是
(done)=>
。这可能会导致您看到的行为。

Kev是正确的,但是Jasmine中的语法涉及在异步执行完成后将expect语句放入promise结果中。它看起来像这样:

it ("should do a thing with promises", function(done) {
            myObject.doAThingWithPromises('')
                .then(function (promiseResult) {
                    expect(promiseResult).toBeDefined();
                    done();
                })
        });

非常感谢Kev!老实说,我没有看到那个愚蠢的错误。我不得不承认,我几周前才开始用Javascript开发,所以我想我缺乏快速发现此类bug的经验。Javascript并没有完全帮助克服它不给出错误的习惯,因为它不需要给出错误;)。但是非常感谢!不客气!的确,许多JS上下文都会产生最糟糕的错误反馈,有时真的会让人恼火。很高兴帮忙!感谢Elliot的详细阐述:)所以在本例中,
request.get(…)。然后(()=>{…done()})