【问题标题】:Jasmine-node expect not executed茉莉花节点期望未执行
【发布时间】:2017-03-31 17:40:56
【问题描述】:

我今天开始使用 Jasmine 进行测试,这对我来说是新的。由于我使用的是使用 NodeJS 开发的 GraphQL 服务器,因此我使用的是jasmine-node

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

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."}]}

很多这正是我所期望的。我做了一个没有查询字符串的请求,所以正文中的错误是预期的。

问题是:it("Should expect something") 内的 4 个无用(明显)expects 工作得很好。这些是结果中的4 assertionsit("Returns statuscode 200.") 中的其他 4 个 expect 根本不在结果中(它们不会失败,也不会通过),但 console.log 是。

我在网上找到的每个示例似乎都与我在这里所做的完全一样,但我无法让它发挥作用。

【问题讨论】:

    标签: javascript node.js jasmine-node


    【解决方案1】:

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

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

    【讨论】:

    • 感谢 Elliot 的详细说明 :)
    • 所以在这种情况下,request.get(...).then( () => { ... done() } )
    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢凯夫!老实说,我没有看到那个愚蠢的错误。我不得不承认我几周前才开始使用 Javascript 进行开发,所以我想我缺乏快速找到此类错误的经验。 Javascript 并不能完全帮助它养成不给出错误的习惯,因为它不需要;)。不过非常感谢!
    • 不客气!确实,许多 JS 上下文会产生最糟糕的错误反馈,有时真的会让人抓狂。很高兴能帮忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2017-02-10
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多